gpt4 book ai didi

matlab - 加速迭代 - MATLAB

转载 作者:太空宇宙 更新时间:2023-11-03 19:27:01 27 4
gpt4 key购买 nike

考虑 2 个向量 A = [20000000 x 1]B = [20000000 x 1]

我需要找到与 B 的每个唯一元素相对应的所有 A 的总和。

虽然这看起来很简单,但在 MATLAB 中却需要很长时间。

目前,我正在使用

u = unique(B);
length_u = length(u);
C = zeros(length_u,1);

for i = 1:length_u
C(i,1) = sum(A(B==u(i)));
end

有没有办法让它运行得更快?我尝试使用并行计算工具箱拆分循环并运行 2 个 parfor 循环(因为我只有 2 个内核)。仍然需要几个小时。

P.S:是的,我应该买一台更好的电脑。

最佳答案

你一定要看this answer首先。
如果必须,您可以使用 histc 的组合和 accumarray

A = randi( 500, 1, 100000 );
B = randi( 500, 1, 100000 );

ub = unique( B );

[ignore idx] = histc( B, [ub-.5 ub(end)+.5] );
C = accumarray( idx', A' )';

ideone 上查看与原始 for 循环实现的玩具比较.

它是如何工作的?

我们使用 histc 的第二个输出将 B(以及后来的 A)的元素映射到由 的元素定义的 bins code>ub(B的唯一元素)。
accumarray 然后用于根据 idx 定义的映射对 A 的所有条目求和。
注意:我假设 B 的唯一元素至少相隔 0.5。

关于matlab - 加速迭代 - MATLAB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24424735/

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