gpt4 book ai didi

algorithm - MATLAB 中超大矩阵的高效乘法

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:24:25 25 4
gpt4 key购买 nike

我没有足够的内存来简单地创建一个对角 D×D 矩阵,因为 D 很大。我不断收到“内存不足”错误。

我没有在第一个乘法中执行 M x D x D 运算,而是执行 M x D 运算,但我的代码仍然需要很长时间才能运行。

有人能找到一种更有效的方法来执行乘法 A'*B*A 吗?到目前为止,这是我尝试过的:

D=20000
M=25

A = floor(rand(D,M)*10);
B = floor(rand(1,D)*10);

for i=1:D
for j=1:M
result(i,j) = A(i,j) * B(1,j);
end
end

manual = result * A';
auto = A*diag(B)*A';
isequal(manual,auto)

alt text

最佳答案

应该可以解决您的问题的一个选项是使用 sparse matrices .这是一个例子:

D = 20000;
M = 25;
A = floor(rand(D,M).*10); %# A D-by-M matrix
diagB = rand(1,D).*10; %# Main diagonal of B
B = sparse(1:D,1:D,diagB); %# A sparse D-by-D diagonal matrix
result = (A.'*B)*A; %'# An M-by-M result

另一种选择是沿 B 的主对角线复制 D 元素,以使用函数 REPMAT 创建一个 M×D 矩阵。 , 然后使用 element-wise multiplicationA.':

B = repmat(diagB,M,1);   %# Replicate diagB to create an M-by-D matrix
result = (A.'.*B)*A; %'# An M-by-M result

还有一个选择是使用函数 BSXFUN :

result = bsxfun(@times,A.',diagB)*A;  %'# An M-by-M result

关于algorithm - MATLAB 中超大矩阵的高效乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4420235/

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