2016-08-19 103 views
0

我從數據集中成對提取數據點。一對由2個numpy陣列組成,每個陣列形狀爲(3, 30, 30)。我們稱它們爲X1Y1。然後下一對將是X2Y2,其次是X3Y3等。我不知道總共有多少對,所以我不得不使用類似np.append之類的東西。將一對特定格式的numpy數組添加到第三個數組

所以,我想是這樣的:

>>X1, Y1 = extract_X_and_Y_from_data(data) 
>>pair1 = np.array([X1, Y1]) 
>>pair1.shape 
(2, 3, 30, 30) 
>>list_of_pairs.some_append_function(pair1) 
>>list_of_pairs.shape 
(1, 2, 3, 30, 30) 

>>X2, Y2 = extract_X_and_Y_from_data(data) 
>>pair2 = np.array([X2, Y2]) 
>>list_of_pairs.some_append_function(pair2) 
>>list_of_pairs.shape 
(2, 2, 3, 30, 30) 

...

>>X50, Y50 = extract_X_and_Y_from_data(data) 
>>pair50 = np.array([X50, Y50]) 
>>list_of_pairs.some_append_function(pair50) 
>>list_of_pairs.shape 
(50, 2, 3, 30, 30) 

所有的一切,我需要最終list_of_pairs是形狀(no_of_pairs, 2, 3, 30, 30)的numpy的陣列。 np.append總是給我(no_of_pairs, 2),我不太清楚爲什麼。

注:np.concatenatevstackhstack是棘手的實現,因爲它們似乎無法執行的第一個實例,即,附加在第一對到最初爲空的list_of_pairs

謝謝!

+0

使用'hstack'等等,你只需要用一個空的數組'seed',像正確的形狀,比如'(0,2,3,30,30)'。 – Julien

+0

從形狀的o/p數組開始:'(no_of_pairs,2,3,30,30)'並迭代地通過索引賦值給它。所以,用第一對:'out [0,0] = X1,out [0,1] = Y1';第二對:'out [1,0] = X2,out [1,1] = Y2,'等等。 – Divakar

+0

@Divakar對的數量是不知道的... – Julien

回答

1

隨着列表追加

list_of_pairs = [] # real list 
for data in database: 
    X1, Y1 = extract_X_and_Y_from_data(data) 
    pair1 = np.array([X1, Y1]) 
    list_of_pairs.some_append_function(pair1) 
array5d = np.array(list_of_pairs) 
>> array5d.shape 
(50, 2, 3, 30, 30) 

appending到列表是比較快的,因爲它只是增加了一個指針到列表中。您的pair陣列仍保留在內存中。

np.array(alist)建立一個新的數組,加入一新的維度部件(同np.array([[1,2,3],[4,5,6]])

有一個新的功能np.stack,讓你一個更好地控制哪些尺寸是新的。所有的stack函數最終都會調用np.concatenate。這包括誤稱(和經常濫用)np.appendconcatenate需要匹配尺寸(在連接方向上)。各種stacks只是調整維度的總數。

相關問題