[英]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
),則可以用新數組替換A
的ith
元素:
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.