我有一个二维矩阵如下:

possibleDirections =

 1     1     1     1     0
 0     0     2     2     0
 3     3     0     0     0
 0     4     0     4     4
 5     5     5     5     5

我需要从每一列中得到一个随机数,从非零的值到向量值5将始终存在,所以不会有任何列都为零。
有什么想法可以通过对向量使用操作(不单独处理每一列)来实现这一点吗?
示例结果为[11 11 5]
谢谢

最佳答案

无需直接或通过arrayfun循环即可完成此操作。

[rowCount,colCount] = size(possibleDirections);
nonZeroCount = sum(possibleDirections ~= 0);
index = round(rand(1,colCount) .* nonZeroCount +0.5);
[nonZeroIndices,~] = find(possibleDirections);
index(2:end) = index(2:end) + cumsum(nonZeroCount(1:end-1));
result = possibleDirections(nonZeroIndices(index)+(0:rowCount:(rowCount*colCount-1))');

09-07 05:41