我有一个很大的数值矩阵矩阵,我假设这里有一个小矩阵
a=[1 1 1;
1 1 1]
然后我有一个索引载体
b=[4;
2]
我的目标是"申请"矢量b
到a
,逐行,以这种方式使a
的第i行的所有项目无效,这些项目落在索引大于在可能的情况下,b
的第i个元素。
因此我想要的输出是:
c=some_smart_indexing_operation(a,b) %this is pseudo-code of course
c=[1 1 1;
1 0 0]
让我逐行评论结果:
在第一行,b
的第一个元素是4:a
只有3个列,没有元素无效
在第二个栏目上,b
的第二个元素是2:我应该取消该行的第二个和第三个元素。
我可以用for
循环执行这样的操作,我想知道是否可以使用一些智能索引操作或应用一些矢量原生函数来获得相同的结果。
答案 0 :(得分:2)
您可以使用bsxfun
创建一个零值掩码,然后将a
元素乘以该掩码:
c = a .* bsxfun(@lt, 1:size(a,2), b);
在Matlab R2016b中,可以使用以下更简单的语法:
c = a .* ((1:size(a,2))<b);
另一种方法是使用上面的补充掩码作为logical index来写零。
c = a;
c(bsxfun(@ge, 1:size(a,2), b)) = 0; % or c(((1:size(a,2))>=b)) = 0