NumPy zip函数

9
如果我有两个numpy 1D数组,例如:
x=np.array([1,2,3])
y=np.array([11,22,33])

我该如何将它们压缩成Numpy 2D坐标数组? 如果我这样做:

x1,x2,x3=zip(*(x,y))

结果的类型是列表,而不是Numpy数组。因此我必须要做…
x1=np.asarray(x1)

等等等等...

是否有一种更简单的方法,不需要在每个坐标上调用np.asarray

是否有一个Numpy zip函数可以返回Numpy数组?


2
np.array([(a,b) for a, b in zip(*(x, y))]) np.array([(a,b) for a, b in zip(*(x, y))]) - DOOM
3个回答

16

只需使用

x1, x2, x3 = np.vstack([x,y]).T

我发现np.stack更加通用。它是堆叠n维输入数组的解决方案。 - steffen
2
现在您还可以简单地使用 np.column_stack((x,y))np.stack((x,y), axis=1)。我不知道这个语句中的 .T 转置是否已经优化,因此可能会增加不必要的计算。无论如何,我的建议是使用这些辅助函数,这样代码更清晰。 - Qululu

3
使用 numpy.dstack() 将输入数组在深度方向上堆叠,并使用 numpy.squeeze() 消除单例维度,然后将结果分配给坐标变量 x1x2x3,如下所示:
In [84]: x1, x2, x3 = np.squeeze(np.dstack((x,y)))

# outputs
In [85]: x1
Out[85]: array([ 1, 11])

In [86]: x2
Out[86]: array([ 2, 22])

In [87]: x3
Out[87]: array([ 3, 33])

0

使用numpy.c_

x1, x2, x3 = np.c_[x, y]

输出:

# x1
array([ 1, 11])

# x2
array([ 2, 22])

# x3
array([ 3, 33])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接