2011-11-18 91 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