见到邻居
例如,MATLAB的一些计算,包括计算当地的手段或有限的差异,或在本地应用一些其他的过滤器,作用于相邻矩阵元素。这样做在一个高效的方式很容易与MATLAB在合适的条件下。史蒂夫谈论邻居索引几年前在他的博客上。
内容
线性索引
我已经讨论过索引以前很多次,如果你想读到的主题从不同的好处而言。现在,让我提醒你什么是线性索引。
MATLAB存储数据列。也就是说,每一列的数据下面堆放前一分之一连续的内存块。如果我有这个矩阵一个
一个= [1 3 5;2 4 6]
一个= 1 3 5 2 4 6
我可以解决元素在第一行,第二列通过下标。
(1、2)
ans = 3
我也可以通过索引提取这个元素一个完全是一个列向量。然后我可以用我们称之为_linear提取相同的元素索引。
(3)
ans = 3
有功能在下标和线性indicies之间进行转换。看一看sub2ind和ind2sub。
我也可以做从下标转换到线性指数轻松自己。对于一个二维数组,我只需要知道多少行矩阵。
nrows =大小(1)
nrows = 2
假设现在我有一个大的矩阵,我想解决一些邻居的一个给定的元素,位于(行、列),对应于线性指数linidx。只要矩阵的元素不是一种边缘太近,我可以考虑邻居在不同方向偏移。因此,邻居这个元素对应的南部(行+ 1,列),或线性索引术语中,linidx + 1。
表的偏移量
这里有一个邻居表4元素adject补偿元素而不是在对角线上。
- S = + 1
- N = ind-1
- E = + nrows
- W = ind-nrows
所以你可以很容易地看到信件,我创建一个数字矩阵值下午1:30安排他们出现在升序当看着一个一维向量。
nrows = 5;ncolumns = 6;B =重塑(1:30,nrows ncolumns)
11 B = 1 6 16 21日26日2 7 12 17日22日27日3 8 13 18 23 28 4 9 14 19 24 29 5 10 15 20 25 30
如果我想找邻居元素(2、4)和(2)矢量化的方式,我可以这样做。
linPairs = sub2ind(大小(B)、[2 3] 2 [4])
linPairs = 17日8
如果我想要的分东,我简单地添加nrows。
eastVals = B (linPairs + nrows)
eastVals = 22日13
谨慎
警示的评论是,你必须非常确定你不会经过优势边界从你感兴趣的元素。如果你这样做,你会出去你的数组的边界或取一个值,缠绕在下一行或列。如果有危险,你可能想要垫初始数组之前做你的邻居操作,然后皮垫后退时完成。
你的计算需要解决的邻居吗?
你与邻居的工作经验是什么?请让我知道在这里。注意边缘
- カテゴリ:
- 索引
コメント
コメントを残すには,ここをクリックしてMathWorksアカウントにサインインするか新しいMathWorksアカウントを作成します。