我将用一个例子来解释我的问题。想象一下,你有一个像下面这样的二维矩阵:
5 4 3 8 0 0
5 4 2 9 1 0
5 6 2 7 2 0
5 4 7 9 0 0
5 6 7 1 2 0
我所说的岛是指相同元素的列组(零除外)。
我想找到
islands
长度的直方图,除了那些由零元素组成的。这个矩阵有
island-length occurrence
5 1
2 3
1 12
如何使用 Matlab 实现此任务?
最佳答案
也许有更短的可能性,但这会做 - 并且它是完全矢量化的:
A = [5 4 3 8 0 0
5 4 2 9 1 0
5 6 2 7 2 0
5 4 7 9 0 0
5 6 7 1 2 0]
%// pad zeros to first line of A
X(2:size(A,1)+1,:) = A;
%// differences of X
dX = diff(X)
%// cumulative sum of "logicalized" differences
cs = cumsum(logical(dX(:)))
%// filter out zeros
cs = cs(logical(A(:)))
%// count occurances
aa = accumarray(cs,1)
%// unique occurances
uaa = unique(aa)
%// count unique occurances
occ = hist(aa,uaa).'
%// accumarray may introduce new zeros, filter out
mask = logical(uaa)
%// output
out = [occ(mask) uaa(mask)]
out =
12 1
3 2
1 5
关于arrays - 查找二维数组中岛屿长度的分布?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40542615/