gpt4 book ai didi

arrays - MATLAB 如何摆脱两个数组相减的循环

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:31:09 24 4
gpt4 key购买 nike

我试图在 MATLAB 中减去两个不同大小的数组,我目前正在使用 for 循环,这需要很长时间。有什么办法可以使下面的代码更快?我想知道是否可以在没有 for 循环的情况下以某种方式快速创建一个 117x489x489 的数组。

第一个数组 a 的尺寸为 1x117,第二个数组 b 的尺寸为 489x489。结果矩阵的尺寸为 117x489x489。

下面是我如何减去两个数组:

for i = 1:length(a)
result(i) = a(i) - b;
end

最佳答案

你可以使用高效的bsxfun这里通过对 ab 进行扩展117x489x489 的大小来避免循环,然后执行 elementwise subtraction 引擎盖下。因此,它提出了一种矢量化方法来实现预期的结果。这是代码-

result = bsxfun(@minus,a(:),permute(b,[3 1 2]))

(:)apermute with b 有助于根据需要分别为 ab 创建单例维度,以便使用 进行各自的扩展bsxfun.


你可以用一些 reshaping 来避免 permute像这样 -

result = reshape(bsxfun(@minus,a(:),b(:).'),[numel(a) size(b)])

关于arrays - MATLAB 如何摆脱两个数组相减的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29134087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com