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

发布于 2024-11-26 17:53:19 字数 474 浏览 2 评论 0原文

我有一个很长的切片序列,需要将其应用于许多 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中做的那样吗?

I have a lengthy slice sequence that I need to apply to lots of MATLAB matrices. How can I do this?

i.e. can I simplify,

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)

to something like,

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

like I can do in Python?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

羅雙樹 2024-12-03 17:53:19

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

%# 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);

您可能想阅读的其他函数: 查找SUB2IND

In your case, you can create a logical mask:

%# 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);

Other functions that you might want to read about: FIND, SUB2IND

心欲静而疯不止 2024-12-03 17:53:19

一种选择是将每个索引向量存储在 元胞数组的元胞中,然后将元胞数组内容提取为 逗号分隔列表如下所示:

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

如果您有大型矩​​阵,且索引集相对较小/稀疏,则此可能使用Amro 建议的逻辑掩码

One option is to store each vector of indices in a cell of a cell array, then extract the cell array content as a comma-separated list like so:

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

If you have large matrices, with relatively small/sparse sets of indices, this may be more efficient than using a logical mask as Amro suggested.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文