如何在朱莉娅执行矢量化划分?

时间:2017-01-23 05:39:24

标签: julia

给定一个252×3阵列的多维数组{Float64,2},为什么我不能做像Python这样的事情:

normalized_data = vals / vals[1,:]让每个元素除以其各自列中的第1个项目。这适用于Python(虽然在分母中有vals[0,:])。在朱莉娅,我不得不使用:

normalized_data = [(vals[:,1] / vals[1,1]) (vals[:,2] / vals[1,2]) (vals[:,3] / vals[1,3])]

这似乎是非常有限的,无论我有多少数据列,它都不是通用的!

1 个答案:

答案 0 :(得分:9)

它可以。

normalized_data = vals ./ vals[1,:]

甚至更好,如果已分配normalized_data

normalized_data .= vals ./ vals[1,:]

(编辑:对于v0.5或更高版本,由于尺寸下降,它必须为vals ./ vals[1,:].'。请参阅评论)

将免费分配。这种形式的矢量化语法部分源自MATLAB。我建议查看手册。如果你刚刚开始,一个地方就是与其他语言的区别:

http://docs.julialang.org/en/release-0.4/manual/noteworthy-differences/

有关广播和了解我们通过明确.获得的收益的更多信息,请参阅以下博文:

http://julialang.org/blog/2017/01/moredots

基本上,因为.是显式的,解析器可以融合表达式并使其比“矢量化”计算la NumPy更有效(或者至少,它总是如此高效可能,而不是由于编译魔术而有时效率高。)