在Julia中正确地(un)压缩数组的方法

时间:2017-05-16 19:30:05

标签: list julia scatter

我正在使用Julia中的PyPlot库进行绘图,并且散布函数似乎有一点“不便”,即只接受坐标作为两个参数:一个数组用于所有x值,另一个用于所有y值价值观,即

Chr(x)

scatter(xxs,yys) x=[x1,x2,...]

如果我有一个带有坐标点的集合或元组,比如

y=[y1,y2,...]

直接在Python中使用pyplot / matplotlib解决了一个班轮的不便,如here in StackOverflow所示:

A=([x1,y1],[x2,y2],...)

但似乎Julia上的拉链完全不同。到目前为止,我已经提出了以下解决方案,但它似乎相当不优雅:

plt.scatter(*zip(*li))

是否有更多“功能性”或单线(或双线)方法?

2 个答案:

答案 0 :(得分:3)

如在另一个答案中所提到的,可以在Julia中使用相同的方法,即scatter(zip(A...)...),但对于较大的向量,这非常慢,应该避免使用。

另一种可能性是使用getindex.(A, i)来获取i中向量的所有A元素的向量。

julia> A = [[i, 10i] for i=1:5]
5-element Array{Array{Int64,1},1}:
 [1, 10]
 [2, 20]
 [3, 30]
 [4, 40]
 [5, 50]

julia> getindex.(A,1)
5-element Array{Int64,1}:
 1
 2
 3
 4
 5

julia> getindex.(A,2)
5-element Array{Int64,1}:
 10
 20
 30
 40
 50

答案 1 :(得分:2)

我可以想到三种方法:

using PyPlot

A = ([1,2],[3,4],[5,6],[7,8])

# approach 1
scatter(zip(A...)...)

# approach 2
B = hcat(A...)
@views scatter(B[1,:], B[2,:])

# approach 3
scatter([x[1] for x in A], [x[2] for x in A])

第一个可能是最具功能性的风格。

在第二个中,如果需要分析数据,可以使用B更容易使用;注: @views需要Julia 0.6,但可以省略。

第三种可能是最容易理解的。