我有几个m文件,这些文件基本上是包含很长时间的复杂方程,它们在期刊论文中占用了多条线。目前,他们使用矩阵运算符,即*
,/
,^
。我想将它们转换为数组运算符,即.*
,./
,.^
,这样我就可以将我对它们进行的计算进行向量化。数组和矩阵运算符之间是否存在性能差异?
我的问题是,是否有任何理由不能简单地做一个搜索并替换所有的操作符?将标量乘以元素明智的运算符是否存在性能问题?
我有几个m文件,这些文件基本上是包含很长时间的复杂方程,它们在期刊论文中占用了多条线。目前,他们使用矩阵运算符,即*
,/
,^
。我想将它们转换为数组运算符,即.*
,./
,.^
,这样我就可以将我对它们进行的计算进行向量化。数组和矩阵运算符之间是否存在性能差异?
我的问题是,是否有任何理由不能简单地做一个搜索并替换所有的操作符?将标量乘以元素明智的运算符是否存在性能问题?
我会说这不是一个表现的问题。
如果你正在处理线性代数表情,那么你肯定不想只搜索&替换:假设A = [1; 2; 3]
和,你有A'*B
,那么你不能转换为A'.*B
因为尺寸不相符元素明智的产品(它会出错)。
在标量乘法的情况下,我认为JIT是足够聪明,认为等同1*2
和1.*2
和相同的解释它们。
最后一行真的是我正在寻找(并找不到)。我不确定MATLAB在处理开销方面是否按照标量处理这两个运算符。 – craigim 2013-05-15 14:38:56
如果你只是做一个搜索和替换,你怎么能确定这些方程中的一些不是*已经*在矩阵上运行? – wakjah 2013-05-13 22:43:01
为什么你不这样做,看看它是否给你想要的结果。如果你担心它会影响性能(我非常怀疑),然后使用'tic'和'toc'或者'timeit'做一个小测试。 – Dan 2013-05-13 23:31:22
如果你的目标是矢量化表达式,那么提供一个最小工作示例我们可以测试以提供矢量化解决方案。 – Oleg 2013-05-14 08:56:56