切片/矢量化表示法中的Numpy数组聚合

时间:2015-11-16 21:35:55

标签: python arrays numpy

使用np,如何创建一个由两个numpy数组组合的新numpy数组?

问题在于:

x = [[a1,a2],[b1,b2],...] # this is an ndarray
y = [a,b,c,...] # ditto

xnew = [[a1,a2,a],...]

xnew = [([a1,a2],a), ...]

以下是使用list和for循环解决问题的方法:

xnew = [(x[i],y[i]) for i in range(len(x))]

如何使用numpy做同样的事情?

1 个答案:

答案 0 :(得分:3)

这是串联的直接案例 - 除了y需要转置:

In [246]: x = np.array([[1,2],[3,4]])
In [247]: y= np.array([[5,6]])
In [248]: np.concatenate((x,y.T),axis=1)
Out[248]: 
array([[1, 2, 5],
       [3, 4, 6]])

也就是说,以某种方式或其他y必须包含与x一样多的行。 column_stackhstack需要相同的转置。

numpy中,元组表示法用于结构化数组记录。这需要定义化合物dtype。如果勾勒出所需的dtype,我可以帮助您构建它。

你发表评论:

  

Y可以是任意长度列表,X也可以,所以我需要将它们分开..

这是否意味着Y和X中可以有不同数量的项目,并且其中一些元组将完成?有一个x项而不是y,或v.v.?如果是这种情况,那么您将测试使用列表理解和zip工具之一(常规zip或itertools中的一个)。 numpy数组用于匹配大小的列表/数组。

zip示例:

In [263]: x = [[1,2],[3,4]]
In [264]: y= [5,6,7]         # not nested

拉链最短,忽略最长

In [266]: [(i,j) for i,j in zip(x,y)]
Out[266]: [([1, 2], 5), ([3, 4], 6)]

拉链最长,垫最短

In [267]: [(i,j) for i,j in itertools.zip_longest(x,y)]
Out[267]: [([1, 2], 5), ([3, 4], 6), (None, 7)]