簡體   English   中英

將 2-D numpy 陣列附加到 3-D numpy 陣列

[英]Appending 2-D numpy array to 3-D numpy array

我有一個循環,每次都會創建一個新的 (2, 3) 數組。 我想將 append 這些 arrays 一起創建一個新的數組 3-D 數組,我想一個例子說明了我最想做的事情。 假設我有一個數組arr1 = array([[1, 2, 3], [4, 5, 6]])和一個數組arr2 = array([[11, 22, 33], [44, 55, 66]]) 我想通過“添加數組”來獲得一個新數組,例如arr3 = np.array([[[1, 11], [2, 22], [3, 33]], [[4,44], [5,55], [6,66]]]) 在實踐中,這看起來像:

import numpy as np

n_samples = 10
total_arr = np.empty([2, 3, n_samples])

for i in range(n_samples):
   arr = np.random.rand(2,3)
   total_arr.append(arr) #This is the step I don't know what do do with

print(total_arr.shape)
>>> (2, 3, 10) #Where 10 is whatever n_samples is

我目前的方法是將total_arr為一個帶有total_lst = total_arr.tolist()和append 的列表,每個arr[i,j]使用for 循環到total_lst中的列表。 所以類似total_list[i][j].append(arr[i,j])但這需要很長時間,是否有 numpy 解決方案?

謝謝

In [179]: arr1 = np.array([[1, 2, 3], [4, 5, 6]]); arr2 = np.array([[11, 22, 33], [44, 55, 66]])                
In [180]: arr1                                                                                                  
Out[180]: 
array([[1, 2, 3],
       [4, 5, 6]])
In [181]: arr2                                                                                                  
Out[181]: 
array([[11, 22, 33],
       [44, 55, 66]])

np.stack可以沿新軸加入 arrays 列表。 默認的行為類似於np.array([arr1, arr2]) ,但看起來你想要一個新的最后一個軸:

In [182]: np.stack([arr1, arr2], axis=2)                                                                        
Out[182]: 
array([[[ 1, 11],
        [ 2, 22],
        [ 3, 33]],

       [[ 4, 44],
        [ 5, 55],
        [ 6, 66]]])

一般來說,在列表中收集 arrays 並在最后進行一次“加入”是最好的。 嘗試數組加入迭代會更慢,而且更難做對。

或者,您可以創建正確目標大小的數組,並分配元素/塊。

===

新的第一軸示例:

In [183]: np.stack([arr1, arr2])                                                                                
Out[183]: 
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[11, 22, 33],
        [44, 55, 66]]])
In [184]: np.stack([arr1, arr2]).transpose(1,2,0)                                                               
Out[184]: 
array([[[ 1, 11],
        [ 2, 22],
        [ 3, 33]],

       [[ 4, 44],
        [ 5, 55],
        [ 6, 66]]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM