我需要构建一个大的 NxN 稀疏带矩阵 A,其中 N = 570*720 = 410400(图像像素数)。
数学上,A(m,n) = C1 * exp(-|mn|^2); m = 1:N, n = 1:N
基本上它是在每一行评估的高斯函数,行索引是平均值和一些任意但小的标准偏差。
对于 N = 100,它看起来像:
不幸的是,由于不必要的计算,它在 N = 410400 时运行非常慢。
1)使用for循环
A = sparse(N,N);
for i=1:N
A(i,:) = normpdf(1:N, i, 30);
end
由于调用 normpdf N 次,这是浪费且缓慢的。
2)计算 normpdf 一次 1:2N 平均在 N 然后循环移动 A 中的行与基于索引的适当平均值。matlab 中的 circshift 不能以不同的移位大小逐列移位矩阵。再次需要调用 circshift N 次 --> 浪费。
3)也许使用 mvnpdf 但它需要输入向量并且使用网格网格生成这些会
消耗大量内存。
4) 将 bsxfun 与用户定义的高斯函数(具有固定 SD)一起使用,因为 bsxfun 不接受 >3 个参数,因此接受两个参数。
关于如何有效实现这一点的任何想法?
谢谢