我将用一个例子来解释我的问题。想象一下,你有一个像下面这样的二维矩阵:

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 长度的直方图,除了那些由零元素组成的。

arrays - 查找二维数组中岛屿长度的分布?-LMLPHP

这个矩阵有
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/

10-12 23:21