gpt4 book ai didi

arrays - 基于两个数组的唯一条目求和 |速度问题

转载 作者:行者123 更新时间:2023-12-02 07:59:59 25 4
gpt4 key购买 nike

我有 3 个大小为 803500*1 的数组,具有以下详细信息:

Rid:可以包含任意数字
RidID:它包含从 1 到 184 的随机顺序的元素。每个元素出现多次。
r:它包含元素 0,1,2,...12。所有元素(零除外)在此数组中的随机索引处出现近 3400 到 3700 次。

以下可能对生成样本数据有用:

Rid = rand(803500,1);
RidID = randi(184,803500,1);
r = randi(13,803500,1)-1; %This may not be a good sample for r as per previously mentioned details?

我想做什么?我想计算 Rid 的那些条目的总和,这些条目对应于 r 的每个正唯一条目和 RidID 的每个唯一条目。我为这个问题写的代码可能会更清楚:

RNum = numel(unique(RidID));
RSum = ones(RNum,12); %Preallocating for better speed
for i=1:12
RperM = r ==i;
for j = 1:RNum
RSum(j,i) = sum(Rid(RperM & (RidID==j)));
end
end

问题:我的代码有效,但在我的计算机上平均需要 5 秒,我必须进行近千次计算。如果这个时间从 5 秒减少到至少一半,我会很高兴。但是我该如何优化呢?我不介意它是否通过矢量化或任何更好的书面循环变得更好。

我正在使用 MATLAB R2017b。

最佳答案

您可以使用 accumarray :

u  = unique(RidID);
A = accumarray([RidID r+1], Rid);
RSum = A(u, 2:13);

关于arrays - 基于两个数组的唯一条目求和 |速度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58653462/

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