2015-02-11 218 views
0

我嘗試添加新創建的陣列到其他numpy陣列,但我做錯了什麼。我想,是添加多個陣列像numpy.array([0, 1, 2, 3]),已製作的磁盤陣列,這樣我就可以得到這樣的:添加陣列到numpy陣列

x = numpy.array([]) 

for i in np.arange(5): 
    y = numpy.array([0, 1, 2, 3]) 
    x = np.append(x, y) 

result: 
x = [0, 1, 2, 3], 
    [0, 1, 2, 3], 
    [0, 1, 2, 3], 
    [0, 1, 2, 3], 
    [0, 1, 2, 3] 

然而,所顯示的環以上我得到這個:

x = [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3] 

回答

1

試試這個:

x = [] 
for i in range(5): 
    y = numpy.array([0, 1, 2, 3]) 
    x.append(y) 

x = numpy.array(x) 

或:

N = 5 
x = numpy.zeros((N, 4)) 

for i in range(N): 
    x[i] = numpy.array([0, 1, 2, 3]) 

這裏我避免了numpy.appendnumpy.vstack,因爲它可能很慢。每撥打numpy.appendnumpy.vstack都會創建一個空陣列,並將xy複製到新的空陣列中。如果你使用一個列表來保存數組的行,直到循環結束,那麼數組在最後被複制一次。

如果沒有你上面的工作,你可以做這樣的事情(但它會慢一些):

x = numpy.zeros((0, 4)) 

for i in range(5): 
    y = numpy.array([0, 1, 2, 3]) 
    x = numpy.vstack(x, y) 
2

append增加了數組的末尾。由於x只有一個維度(它的形狀始於(0,)),因此它只能以您觀察的方式增長。

它通常不是正確的工具,可用於逐步構建多維數組 - 您可以添加追加到特定的訪問(以及堆棧數組),但需要確保兩個數組是相同的形狀和沿着該軸的相同尺寸。在此之上,您要追加的數組必須每次都被複制。

一個建立你需要的陣列更簡潔的方式可以是使用np.tile代替:

>>> np.tile([1, 2, 3, 4, 5], (5, 1)) # (5,1) means 5/1 copies along axis 0/1 
array([[1, 2, 3, 4, 5], 
     [1, 2, 3, 4, 5], 
     [1, 2, 3, 4, 5], 
     [1, 2, 3, 4, 5], 
     [1, 2, 3, 4, 5]])