簡體   English   中英

numpy將列添加到數組數組

[英]numpy add columns to array of arrays

我有一個數組的np數組

allData = np.array([[[1,2,3],[5,5,5]],[4,5,6],[7,8,9]])

我想向每個子數組添加一個新列。 請注意,子數組具有不同的大小。

通過做這個:

toAddValue = 22    
for l in allData:
        newC = np.empty(len(l))
        newC.fill(toAddValue)
        l = np.c_[l,newC]

allData不會更改。

預期結果:

allData = [[[  1.,   2.,   3.,  22.],[  5.,   5.,   5.,  22.]],[[  4.,   5.,   6.,  22.]],[[  7.,   8.,   9.,  22.]]]

我也從以下問題中受益:我在做l = np.c_[l,newC]時如何保留對l的引用而又不丟失相同的指針?

如果使用enumerate (或for i in range(A.shape[0])ith ),則可以用新數組替換Aith元素:

In [91]: A=np.array([[[1,2,3],[5,5,5]],[4,5,6],[7,8,9]])
In [92]: A
Out[92]: array([[[1, 2, 3], [5, 5, 5]], [4, 5, 6], [7, 8, 9]], dtype=object)
In [93]: for i,l in enumerate(A):
    newC=np.empty(len(l))
    newC.fill(42)
    A[i]=np.c_[l,newC]
   ....:     
In [94]: A
Out[94]: 
array([array([[  1.,   2.,   3.,  42.],
       [  5.,   5.,   5.,  42.]]),
       array([[  4.,  42.],
       [  5.,  42.],
       [  6.,  42.]]),
       array([[  7.,  42.],
       [  8.,  42.],
       [  9.,  42.]])], dtype=object)

那看起來不太像您的目標,但這是因為np.c_在第一個2d元素上的操作不同於在第一個2d和3rd上的操作。

請注意,這里的A (從您的代碼開始)是一個列表數組,帶有dtype = object。 但是在迭代之后,它是一個數組數組(這是因為np.c_在進行連接時會將列表轉換為數組)。

這是相同的構造,但具有列表列表

In [105]: Al=list(A)
In [106]: Al
Out[106]: [[[1, 2, 3], [5, 5, 5]], [4, 5, 6], [7, 8, 9]]
In [107]: for i,l in enumerate(Al):
    newC=np.empty(len(l))
    newC.fill(42)
    Al[i]=np.c_[l,newC]
   .....:    
In [108]: Al
Out[108]: 
[array([[  1.,   2.,   3.,  42.],
        [  5.,   5.,   5.,  42.]]), array([[  4.,  42.],
        [  5.,  42.],
        [  6.,  42.]]), array([[  7.,  42.],
        [  8.,  42.],
        [  9.,  42.]])]

暫無
暫無

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

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