我有一个矩阵 a(16x3) 和一个向量 b(16x1)。 b 显示矩阵 a 中每行有多少个有效值。
a = magic(3)
a =
8 1 6
3 5 7
4 9 2
b = [1;3;2]
b =
1
3
2
我想做的是将无效值设置为 NaN:
a(:,b+1:end)=NaN
结果是:
a =
8 NaN NaN
3 NaN NaN
4 NaN NaN
但我所期望的是:
a =
8 NaN NaN
3 5 7
4 9 NaN
这里有什么问题吗?
完美的设置bsxfun http://www.mathworks.in/help/matlab/ref/bsxfun.html with @gt
创建这些元素的逻辑掩码,然后逻辑索引 http://www.mathworks.in/company/newsletters/articles/matrix-indexing-in-matlab.html into a
将它们设置为NaNs
-
a(bsxfun(@gt,1:size(a,2),b(:))) = NaN
通用的示例运行m x n
case -
a =
2 9 7 2 9
5 7 2 9 5
7 5 1 3 1
8 1 6 2 2
b =
1
4
3
2
a =
2 NaN NaN NaN NaN
5 7 2 9 NaN
7 5 1 NaN NaN
8 1 NaN NaN NaN
在这里,logical mask
was -
>> bsxfun(@gt,1:size(a,2),b(:))
ans =
0 1 1 1 1
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
So, the 1s
用于选择元素to be
set as NaNs
其余元素是not to be
触动或改变。
您还可以使用a(~bsxfun(@le,1:size(a,2),b(:))) = NaN
达到同样的效果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)