LineCollection的Numpy zip数组

时间:2015-07-14 13:58:38

标签: python arrays numpy

是否有一种简单的方法可以将numpy列压缩为LineCollection的输入?

当前格式

请注意,该数组包含的元素比使用的元素多得多。

arr=([(x1, y1, z1, a1, b1, c1), (x2, y2, z2, a2, b2, c2), (x3, y3, z3, a3, b3, c3)])

所需格式

我想以下列格式获取行,以便我可以使用LineCollection:

lines = [[(x1, x2), (y1, y2)], [(x2, x3), (y2, y3)] ...]
LineCollection(lines)

2 个答案:

答案 0 :(得分:1)

我不知道任何直接的numpy函数或类似的功能。

但如果您想要的只是每个子列表的前两个元素,那么您可以尝试 -

arr = [(1,2,3,),(2,3,4),(3,4,5),(4,5,6),(5,6,7),(6,7,8)]
lines = []
for i in range(len(arr)-1):
    lines.append([(arr[i][0],arr[i+1][0]),(arr[i][1],arr[i+1][1])])

lines
>>> [[(1, 2), (2, 3)], [(2, 3), (3, 4)], [(3, 4), (4, 5)], [(4, 5), (5, 6)], [(5, 6), (6, 7)]]

答案 1 :(得分:0)

您可以使用array.T方法和np.hstack

示例:

>>> lines = [[(0, 1), (1, 1)], [(2, 3), (3, 3)], [(1, 2), (1, 3)]]
>>> np.hstack(numpy.array([np.array(i).T for i in lines]))
array([[0, 1, 2, 3, 1, 1],
       [1, 1, 3, 3, 2, 3]])