合并两个numpy.array没有循环

时间:2013-08-28 01:46:27

标签: python numpy

我有两个numpy.arrays,我希望有效地获得以下结果

1.将b的元素添加到子数组

    a=numpy.array([(1,2,3),(1,2,3)])
    b=numpy.array([0,0])
->
    c=[(0,1,2,3),(0,1,2,3)] 

循环中的代码

a=numpy.array([(1,2,3),(1,2,3)])
b=numpy.array([(0,0)])
c=numpy.zeros(2 , 4)
idx=0
for x in a:
   c[idx]=(a[idx][0],a[idx][1],a[idx][2], b[idx])
   idx = idx+1


2.从两个1-D阵列获取尺寸为(a.dim * b.dim,2)的二维数组

    a=numpy.array([(1,2)])
    b=numpy.array([(3,4)])
->
    c=[(1,3),(1,4),(2,3),(2,4)]

循环中的代码

a=numpy.array([(1,2)])
b=numpy.array([(3,4)])
c=numpy.zeros(a.size*b.size , 2)
idx=0
for x in a:
    for y in b:
        c[idx]=(x,y)
        idx = idx+1

2 个答案:

答案 0 :(得分:3)

对于第一个问题,您可以区别b并使用numpy.hstack

a = numpy.array([(1,2,3),(1,2,3)])
b = numpy.array([[0],[0]])
numpy.hstack((b,a))

关于第二个问题,我可能会使用sza的答案,并根据需要从该结果创建numpy数组。 an old Stack Overflow question中提出了这种技术。

答案 1 :(得分:2)

对于第一个,你可以做

>>> a=numpy.array([(1,2,3),(1,2,3)])
>>> b=numpy.array([0,0])
>>> [tuple(numpy.insert(x, 0, y)) for (x,y) in zip(a,b)]
[(0, 1, 2, 3), (0, 1, 2, 3)]

对于第二个,你可以得到像这样的二维数组

>>> a=numpy.array([(1,2)])
>>> b=numpy.array([(3,4)])
>>> import itertools
>>> c = list(itertools.product(a.tolist()[0], b.tolist()[0]))
[(1, 3), (1, 4), (2, 3), (2, 4)]