我有一个二维矩阵如下:
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))');