我有一个数组的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
在做时如何保持引用不变而不会丢失相同的指针l = np.c_[l,newC]
?
如果使用enumerate
(或for i in range(A.shape[0])
),则可以用新数组替换的ith
元素A
:
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第一元素上的操作与在1d 2nd和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.]])]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句