matlab中矩阵逐元素乘法的替代方法
我正在做一个大的矩阵乘法。我有一个大矩阵a(至少5000x5000)和一个列向量V(5000x1)。在我的代码中,每一个V都将一个元素的每一列乘以一个元素。我打了个圈matlab中矩阵逐元素乘法的替代方法,matlab,matrix,vectorization,bsxfun,Matlab,Matrix,Vectorization,Bsxfun,我正在做一个大的矩阵乘法。我有一个大矩阵a(至少5000x5000)和一个列向量V(5000x1)。在我的代码中,每一个V都将一个元素的每一列乘以一个元素。我打了个圈 K = zeros(5000, 5000); for n=1:5000 K(:, n) = V.*A(:, n); end 但是它太慢了。所以我创建了一个大矩阵,每个列都被指定为V,这样 MV=repmat(V,1,5000); K = MV.*A; 它很快,但浪费了太多的内存。当矩阵的大小增加时,它会占用太多内存。使用更
K = zeros(5000, 5000);
for n=1:5000
K(:, n) = V.*A(:, n);
end
但是它太慢了。所以我创建了一个大矩阵,每个列都被指定为V,这样
MV=repmat(V,1,5000);
K = MV.*A;
它很快,但浪费了太多的内存。当矩阵的大小增加时,它会占用太多内存。使用更少的内存但速度更快有什么想法吗?classic
bsxfun
K = bsxfun( @times, A, V );
或者,您可能需要查看(在FEX中找到)。classic
bsxfun
K = bsxfun( @times, A, V );
或者,您可能需要查看(在FEX中找到)。您是否预先分配了
K
使其具有正确的大小?您是否预先分配了K
使其具有正确的大小?非常感谢您的输入。bsxfun似乎可以工作,但我需要稍后测试效率。至于MTIMESX,我读了自述文件,但它似乎只是矩阵乘法,而不是元素对元素的乘法。非常感谢您的输入。bsxfun似乎可以工作,但我需要稍后测试效率。至于MTIMESX,我阅读了自述文件,但似乎只是矩阵乘法,而不是元素对元素的乘法。