performance - Matlab 重复矩阵乘法 - 循环与内置性能

标签 performance matlab matrix matrix-multiplication memory-efficient

给定一个矩阵 A,我需要与其他 n 向量相乘 Bi(即 i=1...n )。 A 的大小可以是 5000x5000,因此 Bi 可以是 5000x1

如果我按以下方式评价产品:

for i=1:n
    product=A*Bi;
    % do something with product
end

结果比计算以下产品慢(数量级):

%assume that S is a matrix that contains the vectors Bi as columns, i.e. S(:,i)=Bi, then:
results=A*S;   %stores all the products in matrix form
% do something with results

问题是向量Bi的数量n可能太大而无法存储在内存中,例如n=300000,所以我需要使用循环方法,每次评估产品时,使用它然后丢弃向量 Bi

为什么这种方法与直接乘法相比这么慢,有没有办法克服这个问题?

最佳答案

例如,您可以尝试循环处理批处理

for i = 0:(n/k)-1
    product = A*S(:,(i*k+1):(i+1)*k)
end

并调整 k 为您找到速度和内存的最佳权衡。

MATLAB 的循环很慢,因为它是一种解释型语言。所以它必须即时处理很多事情。如今,由于 JIT 编译器,循环得到了很大改进,但与用 C 编写和编译的内置函数相比,它们仍然很慢。此外,它们使用真正尖端的超快速矩阵乘法算法,与使用通过循环实现的相当幼稚的算法,这也有助于您正在体验的加速。

关于performance - Matlab 重复矩阵乘法 - 循环与内置性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34675870/

相关文章:

matlab - 如何在matlab中写这个矩阵,

string - 高效分割字符串

ruby - 使用数据库中的记录更新哈希数组,将新字段添加到每个现有哈希中

python - Python 中的逐元素乘法相当于 Matlab

matlab - 通过matlab在excel表格中插入图表

android - 使用加速度计计算旋转矩阵

performance - 为什么 CUDA 代码在 NVIDIA Visual Profiler 中运行得这么快?

python - 为什么这个正则表达式会经历灾难性的回溯?

matlab - 根据元胞数组中的内容查找列索引

ios - 同步不同坐标空间中的超 View 和单个 View 的变换矩阵