2011-11-18 66 views
2

我创建了两个使用numpy的1维列数组 - 一个具有100个单元格,第二个10000个单元格。我现在想要做的是编写2维数组,其中第一个数组中的每个单元格(具有100个元素的单元格)从第二个数组写入所有10000个值。小例子解释它:组合两个不相等的数组

a = 
    [[1], 
    [2], 
    [3]] 

b = 
    [[4], 
    [5]] 

而且我想获得:

c = [[1], [4], 
    [1], [5], 
    [2], [4], 
    [2], [5], 
    [3], [4], 
    [3], [5]] 

我试图找到任何解决办法,但我没有成功。我希望能在这里找到帮助。 干杯, Jonh

+0

我想你可以看看函数''np.repeat''和''np.tile''。 – joris

回答

3

这是你想要的吗?我使用函数np.repeat重复每个单独的元素(第一个数组)和np.tile以重复整个数组(第二个数组)。

>>> import numpy as np 
>>> a = np.array([[1],[2],[3]]) 
>>> b = np.array([[4],[5]]) 
>>> 
>>> at = np.repeat(a, len(b), axis = 0) 
>>> at 
array([[1], 
     [1], 
     [2], 
     [2], 
     [3], 
     [3]]) 
>>> bt = np.tile(b, (len(a), 1)) 
>>> bt 
array([[4], 
     [5], 
     [4], 
     [5], 
     [4], 
     [5]]) 
>>> np.concatenate((at, bt), axis = 1) 
array([[1, 4], 
     [1, 5], 
     [2, 4], 
     [2, 5], 
     [3, 4], 
     [3, 5]]) 
+0

谢谢!这正是想要获得的。 –

1

你想要itertools.product

In [2]: import itertools 

In [3]: scipy.array(list(itertools.product([1,2,3], [4,5]))) 
Out[3]: 
array([[1, 4], 
     [1, 5], 
     [2, 4], 
     [2, 5], 
     [3, 4], 
     [3, 5]]) 
+0

这确实也是一个很好的(简短易读的)解决方案,但有一点小意见:如果你使用的是numpy数组(并且因此需要numpy数组),那么使用numpy函数的解决方案比使用列表和itertools当数组增长时)。 – joris