我有一个矩阵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
这里有什么问题?
答案 0 :(得分:4)
使用@gt
完美设置 bsxfun
以创建这些元素的逻辑掩码,然后将 logically index 导入{{1将它们设置为a
-
NaNs
针对通用a(bsxfun(@gt,1:size(a,2),b(:))) = NaN
案例的示例运行 -
m x n
此处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
因此,>> 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
用于选择 1s
设置为to be
的元素,其余元素为 {{1触摸或更改了。
您也可以使用NaNs
获得相同的效果。
答案 1 :(得分:0)
我可以提出一个想法,
a = magic(3);
b = [1;3;2];
代码:
a (repmat(b,[1 , 3]) < repmat(1 : 3 , [3 , 1])) = NaN
给出;
a =
8 NaN NaN
3 5 7
4 9 NaN
对于矩阵大小,它将是,
a = randi(9,[16 3]);
b = randi([0 3],[16 1]);
代码:
a (repmat(b,[1 , 3]) < repmat(1 : 3 , [16 , 1])) = NaN