使用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做同样的事情?
答案 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_stack
和hstack
需要相同的转置。
在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)]