Matlab会更改一行中低于阈值的行之后的所有行的值

时间:2013-10-15 11:24:34

标签: matlab matrix

给定一个矩阵,我想逐行检查并找到任何低于阈值的值称之为T.在第一个实例中,行中的值低于T,该行中的所有后续列应该将它们的值改为0。这很容易迭代几个循环,但我想通过矩阵运算来做这个,因为我有50k行和100列。

具体来说,我想用T = .5:

取以下输入矩阵

1 1 1 1 0 1 1 1 1

1 1 1 1 1 1 1 1 1

1 0 1 1 1 1 1 1 1

并获得以下内容:

1 1 1 1 0 0 0 0 0

1 1 1 1 1 1 1 1 1

1 0 0 0 0 0 0 0 0

非常感谢任何帮助(并再次提醒我希望尽可能避免使用循环)

由于 莱恩

1 个答案:

答案 0 :(得分:5)

怎么样:

m(cumsum(m < T, 2)==1) = 0   %// Note that ==1 is the same as just logical(), you can test to see if there is a relevant performance difference for you, otherwise just pick the more readable one

或者,如果您需要保留低于阈值的第一个值,那么可能:

I = [false(size(m,1), 1) , logical(cumsum(m < T, 2))]
m(I(:, 1:end-1)) = 0