我是Julia的新手,我正在努力使我的程序尽可能高效。我的程序需要用矩阵计算很多东西,我偶然发现了广播运算符,它让一切都加快了很多。然而,现在我发现了另一种特殊的计算方法。
第一个版本是:(都是NxN矩阵)'
hist .= hist .+ mask
我的算法包括这一行,每次迭代大约运行1秒。
现在我想聪明一点,把.=
和.+
结合起来,所以我尝试了.+=
,因为+=
可以工作,我只需要广播它。然而,正如你可能知道的,这并没有工作。
我不小心尝试了这个版本的代码:
hist .=+ mask
令人惊讶的是,这将运行时间缩短到0.2秒
谁能给我解释一下.=+
的意思,为什么它不是.+=
?或者是一样的吗?提前感谢!
编辑:我的IDE是为什么.+=
不工作的问题。然而,这是正确的做法!
如注释所述,.=+
在Julia中不是操作符。您正在寻找.+=
.
为了解释您观察到的行为,hist .=+ mask
解析为hist .= (+mask)
,在这种情况下,相当于广播赋值hist .= mask
,将mask
的每个元素赋值给hist
的相应元素。这比hist .+= mask
要快,因为.=+
并没有像你想象的那样。它会跳过加法。