让我们有一个 M = [10 x 4 x 12]
矩阵。例如,我以 M(:,:,4)
:
val(:,:,4) =
0 0 1 0
0 1 1 1
0 0 0 1
1 1 1 1
1 1 0 1
0 1 1 1
1 1 1 1
1 1 1 1
0 0 1 1
0 0 1 1
我怎样才能得到这个:
val(:,:,4) =
0 0 3 0
0 2 2 2
0 0 0 4
1 1 1 1
1 1 0 1
0 2 2 2
1 1 1 1
1 1 1 1
0 0 3 3
0 0 3 3
- 如果我在第一列中有 1,那么所有后续的 1 都应该是 1。
- 如果我在第一列中有 0 而在第二列中有 1,则所有后续的 1 都应该是 2。
- 如果我在第一列和第二列中有 0,但在第三列中有 1,那么所有后续的 1 都应该是 3。
- 如果我在前 3 列中有 0,但在第四列中有 1,那么这一列应该是四。
注:构造逻辑矩阵M
:
Tab = [reshape(Avg_1step.',10,1,[]) reshape(Avg_2step.',10,1,[]) ...
reshape(Avg_4step.',10,1,[]) reshape(Avg_6step.',10,1,[])];
M = Tab>=repmat([20 40 60 80],10,1,size(Tab,3));
最佳答案
这是一种非常简单的方法,适用于 2D 和 3D 矩阵。
%// Find the column index of the first element in each "slice".
[~, idx] = max(val,[],2);
%// Multiply the column index with each row of the initial matrix
bsxfun(@times, val, idx);
关于matlab - 使用多个条件分配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28187973/