当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在朱莉娅执行矢量化划分?》经验,为你挑选了1个好方法。

给定一个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> Chris Rackau..:

它可以.

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更有效(或者至少,它总是尽可能高效,而不是有时是有效的到期编译魔术).


而不是转置,我发现直接将维度保持在索引表达式中更具可读性:`vals ./ vals [1:1,:]`.
由于`'`是共轭转置,因此它应该是'vals ./ vals [1,:].'`.
请记住`val [1,:]`现在变成了`Vector`,所以你需要`vals./ vals [1,:]'`版本> = 0.5.
推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有