我有N kx1稀疏向量,我需要将它们中的每一个乘以它们的转置,创建 N 个方阵,然后我必须对它们求和。k所需的输出是k矩阵。我曾尝试在循环中执行此操作并使用 arrayfun,但两种解决方案都太慢了。也许你们中的一个人可以更快地想出一些东西。以下是有关我提出的最佳解决方案的具体细节。
mdev_big是稀疏矩阵k,N包含每个N向量。
fun_sigma_i = @(i) mdev_big(:,i)*mdev_big(:,i)';
sigma_i = arrayfun(fun_sigma_i,1:N,'UniformOutput',false);
sigma = sum(reshape(full([sigma_i{:}]),k,k,N),3);
这个过程的缓慢部分正在完成sigma_i,但我无法将它重塑为 3d 数组。我也尝试过 cat 而不是 reshape (较慢), ndSparse 而不是 full (慢得多),并fun_sigma_i返回一个完整的矩阵而不是一个稀疏的矩阵(较慢)。
谢谢您的帮助!,