matlab - 使用多个条件分配值

标签 matlab matrix

让我们有一个 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/

相关文章:

Matlab:使用矩阵运算而不是 for 循环

matlab - Matlab中矩阵内列顺序的差异

C - 按值传递矩阵?

c++ - C++ 的混合类型、可变长度参数列表(varargin、*args、...)

r - 在 Matlab 中是否有等同于 R 的负索引?

matlab - 矩阵运算难度

c - 为什么 MATLAB 使用列优先顺序?

matlab - 在matlab中从矩阵绘制网络或图形

c++ - 如何在 C++ 和 matlab 进程之间放置共享内存?

matlab - 将大量 CSV 文件导入 Matlab