2017-09-06 79 views
-1

我有函數(的getArray)返回的大小爲(1,40)numpy的陣列,可以說,它返回:在循環中創建大型Numpy數組的正確方法?

[-0.385 -0.385 -0.405 -0.455 -0.485 -0.485 -0.425 -0.33 -0.22 -0.07 0.12 0.375 0.62 0.78 0.84 0.765 0.52 0.17 -0.165 -0.365 -0.435 -0.425 -0.37 -0.33 -0.325 -0.335 -0.345 -0.33 -0.325 -0.315 -0.31 -0.32 -0.335 -0.34 -0.325 -0.345 -0.335 -0.33 -0.335 -0.33 ] 

然後在循環我需要創建包含由getArray-返回多個陣列numpy的陣列數組的功能和大小可以是例如(2000,40)。這樣做的正確方法是什麼?

如果我在循環中創建Numpy數組,我需要在每次迭代中創建新數組,這不是我想要的。現在我首先創建了Numpy數組列表,然後從列表中創建數組。它很好地工作,直到行數超過255.之後,數組從2D變爲1D。

我也嘗試使用vstack函數向數組添加行。當最終的數組大小(255,40)時,這很好地工作。以下是我使用的代碼:

A = numpy.empty((0,40), float) 
for value in values: 
    meas = getArray(value) 
    A = numpy.vstack([A, meas]) 
print(A.shape) 
print(A) 

如果有最大255行,我得到了以下結果

(255, 40) 
[[-0.385 -0.385 -0.405 ..., -0.33 -0.335 -0.33 ] [-0.425 -0.445 -0.475 ..., -0.375 -0.395 -0.41 ] [-0.41 -0.435 -0.465 ..., -0.4 -0.4 -0.415] ..., [-0.47 -0.495 -0.495 ..., -0.425 -0.425 -0.43 ] [-0.5 -0.52 -0.57 ..., -0.455 -0.445 -0.435] [-0.515 -0.57 -0.62 ..., -0.39 -0.41 -0.385]] 

如果有超過255行,我得到了以下錯誤

ValueError: all the input array dimensions except for the concatenation axis must match exactly

編輯:

以下工作:

array = numpy.empty((size,total_window_size)) 
for index, value in enumerate(values): 
    meas = getArray(value) 
    if meas.size == total_window_size: 
     array[index] = meas 
+0

通常我建議將數組附加到列表中,並在末尾執行一個'vstack'。列表追加相對較快。我不知道你爲什麼會得到255以上的錯誤。你確定你的函數仍然返回相同大小的數組嗎? – hpaulj

+0

可能getArray返回的數組比上次調用時預期的要小,謝謝 – lipponen

回答

1

如果您知道循環迭代(例如在for循環)的數量,你可以在循環之前的陣列具有適當大小這樣的初始化:

result = np.empty((nbIterations, 40)) 
for i in range(nbIterations): 
    result[i] = getArray(parameters) 

getArray總是返回相同的值?如果是這種情況,你也可以使用

return = np.tile(getArray(), nbIterations).reshape((nbIterations, -1)) 

來創建你的數組。

一般來說,使用列表並不是一種好方法,因爲它們往往會很慢:無論何時將一個項目追加到列表中,必須修改RAM中的列表結構,長列表需要很長時間。因此,您應該使用numpy陣列 -

相關問題