【问题标题】:Numpy zip functionNumpy 压缩功能
【发布时间】:2026-01-08 22:55:02
【问题描述】:

如果我有两个 numpy 一维数组,例如

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 数组的 Numpy zip 函数?

【问题讨论】:

  • np.array([(a,b) for a, b in zip(*(x, y))])

标签: python numpy multidimensional-array numpy-ndarray


【解决方案1】:

随便用

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

【讨论】:

  • 我发现np.stack 更加通用。它是堆叠n维输入数组的解决方案。
  • 您现在也可以简单地使用np.column_stack((x,y))np.stack((x,y), axis=1)。我不知道此语句中的.T 转置是否经过某种优化,因此可能会增加不必要的计算。不管怎样,我的建议是使用这些辅助函数,这样代码也更简洁。
【解决方案2】:

使用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])

【讨论】: