Arrays 基于Matlab中的一个准则生成数组的多个完整副本

Arrays 基于Matlab中的一个准则生成数组的多个完整副本,arrays,matlab,multidimensional-array,indexing,Arrays,Matlab,Multidimensional Array,Indexing,我试图找出一种数组索引方法,为截止点以上的每个值保存整个数组。我正在处理的矩阵有10^9个元素,因此编写for循环是不可能的 例如,假设有一个矩阵 Vals=[96 92 97;83 90 95] 因为我的截止值是95,这对应于一个矩阵 ExceedsCutoff=[1 0 1;0 0 1] 我想使用EXCEEDSCUTOF作为逻辑工具来生成矩阵想要的输出 WantedOutput(1,:,:)=Vals WantedOutput(2,:,:)=zeros(2,3) WantedOutput

我试图找出一种数组索引方法,为截止点以上的每个值保存整个数组。我正在处理的矩阵有10^9个元素,因此编写for循环是不可能的

例如,假设有一个矩阵

Vals=[96 92 97;83 90 95]
因为我的截止值是95,这对应于一个矩阵

ExceedsCutoff=[1 0 1;0 0 1]
我想使用EXCEEDSCUTOF作为逻辑工具来生成矩阵想要的输出

WantedOutput(1,:,:)=Vals
WantedOutput(2,:,:)=zeros(2,3)
WantedOutput(3,:,:)=zeros(2,3)
WantedOutput(4,:,:)=zeros(2,3)
WantedOutput(5,:,:)=Vals
WantedOutput(6,:,:)=Vals

因为EXCEEDSCUTOF的第一、第五和第六个元素是1。有什么办法吗?谢谢

使用bsxfun()进行简单的乘法运算即可:

Vals=[96 92 97;83 90 95];
Vals=permute(Vals,[3,1,2]);
Cutoff = 95;
ExceedsCutoff=Vals >= Cutoff;

WantedOutput = bsxfun(@times,ExceedsCutoff(:),Vals);
% Or, for MATLAB2016b and older
WantedOutput = ExceedsCutoff(:).*Vals;

是的,这很有效!我唯一添加的是行排列(WantedOutput,[2,3,1]),以使WantedOutput的维度与输入数组的维度相同。我使用的是R2014a,但bsxfun似乎工作正常。