我可以在变量中存储MATLAB切片吗?

时间:2011-07-25 16:35:18

标签: matlab slice

我有一个冗长的切片序列,我需要应用于许多MATLAB矩阵。我怎么能这样做?

即。我可以简化,

y(1:some_var*3,1:some_other_var*3,1:another_var*3) = x1(1:some_var*3,1:some_other_var*3,1:another_var*3) .* x2(1:some_var*3,1:some_other_var*3,1:another_var*3) ./ x3(1:some_var*3,1:some_other_var*3,1:another_var*3)

之类的,

inds = slice(1:some_var*3,1:some_other_var*3,1:another_var*3)
y(inds) = x1(inds) .* x2(inds) ./ x3(inds)

就像我可以用Python做的那样?

2 个答案:

答案 0 :(得分:3)

在您的情况下,您可以创建逻辑掩码:

%# assuming x1,x2,x3,y are all of the same size

mask = false(size(x1));
mask(1:some_var*3,1:some_other_var*3,1:another_var*3) = true;

y(mask) = x1(mask).*x2(mask)./x3(mask);

您可能希望阅读的其他功能:FINDSUB2IND

答案 1 :(得分:2)

一种选择是将每个索引向量存储在cell array的单元格中,然后将单元格数组内容提取为comma-separated list,如下所示:

inds = {1:some_var*3, 1:some_other_var*3, 1:another_var*3};
y(inds{:}) = x1(inds{:}) .* x2(inds{:}) ./ x3(inds{:});

如果您有大型矩​​阵,索引相对较小/稀疏,则此可能using a logical mask as Amro suggested更有效。