gpt4 book ai didi

performance - 使用矩阵结构加速matlab

转载 作者:太空宇宙 更新时间:2023-11-03 19:52:29 24 4
gpt4 key购买 nike

假设我有一个 N-by-K矩阵 A , N-by-P矩阵 B .我想进行以下计算以获得最终的 N-by-P矩阵 X .

X(n,p) = B(n,p) - dot(gamma(p,:),A(n,:))

在哪里

gamma(p,k) = dot(A(:,k),B(:,p))/sum( A(:,k).^2 )

在 MATLAB 中,我的代码如下

for p = 1:P
for n = 1:N
for k = 1:K
gamma(p,k) = dot(A(:,k),B(:,p))/sum(A(:,k).^2);
end
x(n,p) = B(n,p) - dot(gamma(p,:),A(n,:));
end
end

这是非常低效的,因为它使用了三个 for 循环!有加速此代码的好方法吗?

最佳答案

使用 bsxfun 进行循环的除法和矩阵乘法:

gamma = bsxfun(@rdivide, B.'*A, sum(A.^2));
x = B - A*gamma.';

这是一个测试脚本

N = 3;
K = 4;
P = 5;

A = rand(N, K);
B = rand(N, P);

for p = 1:P
for n = 1:N
for k = 1:K
gamma(p,k) = dot(A(:,k),B(:,p))/sum(A(:,k).^2);
end
x(n,p) = B(n,p) - dot(gamma(p,:),A(n,:));
end
end

gamma2 = bsxfun(@rdivide, B.'*A, sum(A.^2));
X2 = B - A*gamma2.';

isequal(x, X2)
isequal(gamma, gamma2)

返回

ans =
1
ans =
1

关于performance - 使用矩阵结构加速matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19504719/

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