似乎在Julia鼓励编写devectorized代码.甚至有一个包试图为你做这件事.
我的问题是为什么?
首先,从用户体验方面来讲,矢量化代码更简洁(代码更少,然后错误的可能性更小),更清晰(因此更容易调试),更自然的编写代码的方式(至少对于来自科学计算背景,朱莉娅试图迎合).能够写出类似vector'vector或vector'Matrix*vector非常重要的东西,因为它对应于实际的数学表示,这就是科学计算人员在脑海中想到它的方式(而不是嵌套循环).我讨厌这样的事实,这不是写这个的最好方法,并且将它重新分解为循环会更快.
目前,编写快速代码的目标与简洁/清晰的代码之间似乎存在冲突.
其次,技术原因是什么?好吧,我明白量化的代码创建额外的临时等,但矢量化功能(例如broadcast(),map()等),具有多线程他们的潜力,我认为多线程的好处会超过临时工和其他缺点的开销矢量化函数使它们比常规循环更快.
Julia中的矢量化函数的当前实现是否隐含多线程?
如果没有,是否有工作/计划为向量化函数添加隐式并发并使它们比循环更快?
你如何根据条件简单地选择一个数组的子集?我知道Julia不使用矢量化,但是必须有一种简单的方法来执行以下操作,而不需要看起来很难看的多行for循环
julia> map([1,2,3,4]) do x
return (x%2==0)?x:nothing
end
4-element Array{Any,1}:
nothing
2
nothing
4
Run Code Online (Sandbox Code Playgroud)
期望的输出:
[2, 4]
Run Code Online (Sandbox Code Playgroud)
观察到的输出:
[nothing, 2, nothing, 4]
Run Code Online (Sandbox Code Playgroud)