我在matlab中有以下说明
out = accumarray (A,B,sz);
其中 B 和 A 的大小分别为 1x957600 和 957600x1,sz 为 [1445 1]。结果是 1445x1 大小。
我的问题是我们如何在不使用 accumarray 和使用稀疏矩阵乘法的情况下实现此指令。
我找到了以下解决方案,但我不知道如何根据我拥有的数据来实现它
Matlab代码
%fake data setup
M=1e5;
A=kron(speye(M),ones(1,16));
N=size(A,2);
[I,J]=find(A);
x=rand(N,1);
%pretend we build A from scratch
tic;
A=sparse(I,J,1);
toc %Elapsed time is 0.062737 seconds.
%Apply A
tic
y1=A*x;
toc %Elapsed time is 0.006868 seconds.
%Using accumarray
b=x(J);
tic
y2=accumarray(I,b,[M,1]);
toc %Elapsed time is 0.012236 seconds.
我问这个问题是因为我想在 C++ 中使用 accumarray。我有一个解决方案,但它需要很多时间来进行计算。这是我两天前的问题,其中包含 accumarray 的 c++ 实现。