gpt4 book ai didi

performance - 矩阵乘法中的 bsxfun 实现

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

一如既往地想向您学习更多信息,我希望我能在以下代码方面得到一些帮助。

我需要完成以下任务:

1) 我有一个向量:

x = [1 2 3 4 5 6 7 8 9 10 11 12]

2) 和一个矩阵:

A =[11    14    1
5 8 18
10 8 19
13 20 16]

我需要能够将 xeach 值与 Aevery 值相乘,这意味着:

new_matrix = [1* A
2* A
3* A
...
12* A]

这将给我这个 new_matrix 大小 (12*m x n) 假设 A (mxn)。在这种情况下 (12*4x3)

如何使用来自 matlab 的 bsxfun 来做到这一点?而且,这种方法会比 for-loop 更快吗?

关于我的for-loop,我在这里也需要一些帮助......我无法在循环运行时存储每个“new_matrix” :(

for i=x
new_matrix = A.*x(i)
end

提前致谢!!

编辑:在给出的解决方案之后

第一个解决方案

clear all
clc
x=1:0.1:50;
A = rand(1000,1000);
tic
val = bsxfun(@times,A,permute(x,[3 1 2]));
out = reshape(permute(val,[1 3 2]),size(val,1)*size(val,3),[]);
toc

输出:

Elapsed time is 7.597939 seconds.

第二种方案

clear all
clc
x=1:0.1:50;
A = rand(1000,1000);
tic
Ps = kron(x.',A);
toc

输出:

Elapsed time is 48.445417 seconds.

最佳答案

x传送到三维,这样当bsxfunA相乘时单例展开就生效了,扩展了产品结果到三维。然后,执行 bsxfun 乘法 -

val = bsxfun(@times,A,permute(x,[3 1 2])) 

现在,val 是一个3D 矩阵,所需的输出应该是一个2D 矩阵,该矩阵在三维中沿列连接.这是在下面实现的-

out = reshape(permute(val,[1 3 2]),size(val,1)*size(val,3),[])

希望这是有道理的!传播 bsxfun 这个词!呜!! :)

关于performance - 矩阵乘法中的 bsxfun 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23807960/

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