给定一个矩阵,我想逐行检查并找到任何低于阈值的值称之为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
非常感谢任何帮助(并再次提醒我希望尽可能避免使用循环)
由于 莱恩
答案 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