Julia中.=+的含义是什么?与.+=有何区别?
Julia广播赋值语法疑问:
.=+ vs .+= 问题背景
作为Julia新手,在优化矩阵计算性能时发现广播算子能显著提速。最初使用的代码为(hist和mask均为N×N矩阵):
hist .= hist .+ mask
包含该行的算法每次迭代耗时约1秒。
尝试将.=与.+合并为.+=(类比+=的广播写法)时遭遇失败,偶然使用以下代码后,运行时间降至0.2秒:
hist .=+ mask
由此产生疑问:.=+的含义是什么?为何正确写法不是.+=?二者是否相同?
补充编辑:后续确认是IDE问题导致.+=无法正常输入/识别,.+=才是符合规范的正确写法!
解答
.+=是标准广播复合赋值运算符
Julia中,.+=是官方设计的广播式复合赋值语法,作用是对左右两个数组执行逐元素相加,再将结果赋值给左边的数组,完全等价于hist .= hist .+ mask。这种写法既简洁,又能保证和原代码一致的最优性能,是处理数组逐元素更新的标准写法。.=+是语法解析的巧合组合.=+并非Julia官方定义的合法运算符,它是Julia语法解析器将.=(广播赋值)和+(一元正号运算符)意外组合后的结果,实际解析为hist .= (+mask)——也就是将mask逐元素取正(若mask本身非负,就是原矩阵)后赋值给hist。你实际运行时得到相加效果且性能提升,大概率是当时的IDE或代码环境出现了异常解析,本质上这是不规范的写法,可读性差且存在潜在的行为不确定性,绝对不应该在正式代码中使用。关于
.+=无法使用的问题
你之前遇到的.+=无法使用的情况,完全是IDE的输入识别或语法高亮问题,Julia语言本身从v1.0版本开始就支持.+=这类广播复合赋值运算符。
内容的提问来源于stack exchange,提问作者Oliver
相关产品推荐
相关产品推荐

