gpt4 book ai didi

arrays - 从冗余索引列表更新矩阵

转载 作者:行者123 更新时间:2023-12-05 02:27:58 37 4
gpt4 key购买 nike

我有一个矩阵 A,索引列表 isjs,以及要添加到 A 的值列表ws。最初我只是通过嵌套的 for 循环遍历 A:

for idx = 1:N
i = is(idx);
j = js(idx);
w = ws(idx);
A(i,j) = A(i,j) + w;
end

但是,我想对其进行矢量化以提高效率。我想一些简单的事情,比如

A(is,js) = A(is,js) + ws

会起作用,只要 is 和 js 不重复。换句话说,如果我生成 idx = sub2ind(size(A),is,js);,只要 idx 没有重复值,一切都很好。如果是,则只添加最后一个值,所有以前的值都被忽略。一个具体的例子:

A = zeros(3,3);
indices = [1,2,3,1];
additions = [5,5,5,5];
A(indices) = A(indices) + additions;

这导致第一列的值为 5,而不是 5、5、10。

这是一个小例子,但在我的实际应用中,索引列表非常长并且充满了冗余值。我希望对此进行矢量化以节省时间,因此通过并消除冗余并不是一个真正的选择。所以我的主要问题是,如何从一组给定的冗余索引添加到矩阵?或者,是否有另一种无需任何迭代即可解决此问题的方法?

最佳答案

强调accumarray的一个不错的属性(accumarray 实际上适用于两个索引)

以 Luis Mendo 为例:

is = [2 3 3 1 1 2].';
js = [1 3 3 2 2 4].';
ws = [10 20 30 40 50 60].';

A3 = accumarray([is js],ws);


%% A3 =

%% 0 90 0 0
%% 10 0 0 60
%% 0 0 50 0

关于arrays - 从冗余索引列表更新矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72779433/

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