gpt4 book ai didi

matlab - Matlab 中大型非稀疏矩阵的高效运算

转载 作者:太空宇宙 更新时间:2023-11-03 20:02:11 25 4
gpt4 key购买 nike

我需要在 Matlab 中操作大型 3 维非稀疏矩阵。使用纯矢量化会导致较长的计算时间。所以,我尝试将操作分成 10 个 block ,然后解析结果。当我看到纯矢量化不能很好地扩展数据大小时,我感到很惊讶,如下图所示。

enter image description here

我包括了这两种方法的示例。

% Parameters:
M = 1e6; N = 50; L = 4; K = 10;

% Method 1: Pure vectorization
mat1 = randi(L,[M,N,L]);
mat2 = repmat(permute(1:L,[3 1 2]),M,N);
result1 = nnz(mat1>mat2)./(M+N+L);

% Method 2: Split computations
result2 = 0;
for ii=1:K
mat1 = randi(L,[M/K,N,L]);
mat2 = repmat(permute(1:L,[3 1 2]),M/K,N);
result2 = result2 + nnz(mat1>mat2);
end
result2 = result2/(M+N+L);

因此,我想知道是否还有其他方法可以使 Matlab 中的大矩阵运算更加高效。我知道这是一个相当广泛的问题,但我会冒这个险:)


编辑:

使用@Shai的实现

% Method 3
mat3 = randi(L,[M,N,L]);
result3 = nnz(bsxfun( @gt, mat3, permute( 1:L, [3 1 2] ) ))./(M+N+L);

时间是:

enter image description here

最佳答案

为什么是 repmat 而不是 bsxfun

result = nnz(bsxfun( @gt, mat1, permute( 1:L, [3 1 2] ) ))./(M+N+L);

似乎您正在用完 RAM,操作系统开始为非常大的矩阵分配交换空间。内存交换始终是一项非常耗时的操作,并且随着所需内存量的增加而变得更糟。
相信你在见证thrashing .

关于matlab - Matlab 中大型非稀疏矩阵的高效运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22383813/

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