我试图将A
与C1
和C2
连接起来。对于C1=[]
,我不确定为什么在B1
中有一个额外的[0]
。对于C2=[1,2]
,存在形状不匹配。电流和期望的输出是附加的。我对以下条件感兴趣:
(1)如果是C1=[]
,则不需要在B1
中插入A1
。(2)如果是C1=[1]
,在B1
的相应位置插入A1
。(3)如果是C1=[1,2]
,则在B1
的所有特定位置插入A1
。
import numpy as np
A=np.array([[[1],
[2],
[3],
[4],
[5],
[6],
[7]]])
C1=[]
C2=[1,2]
D=[7]
A1=np.array([0])
A2=np.array([0])
B1=np.insert(A,C1+D,[A1,A2],axis=1)
print("B1 =",[B1])
B2=np.insert(A,C2+D,[A1,A2],axis=1)
print("B1 =",[B2])
当前输出为
B1 = [array([[[1],
[2],
[3],
[4],
[5],
[6],
[7],
[0],
[0]]])]
in <module>
B2=np.insert(A,C2+D,[A1,A2],axis=1)
File "<__array_function__ internals>", line 5, in insert
File "C:UsersUSERanaconda3libsite-packagesnumpylibfunction_base.py", line 4678, in insert
new[tuple(slobj)] = values
ValueError: shape mismatch: value array of shape (2,1) could not be broadcast to indexing result of shape (3,1,1)
期望的输出是
B1 = [array([[[1],
[2],
[3],
[4],
[5],
[6],
[7],
[0]]])]
B2 = [array([[[1],
[0],
[0],
[2],
[3],
[4],
[5],
[6],
[7],
[0]]])]
insert
是Python函数。在传递给它之前,它的参数会被完整地求值。看看你在传递什么:
In [20]: C1+D, C2+D
Out[20]: ([7], [1, 2, 7])
In [21]: np.array([A1,A2])
Out[21]:
array([[0],
[0]])
您已经丢失了想象中的[],[7]
和[[1,2],[7]]
结构。
您的B1
成功地将[[0],[0]]放在槽位7。B2
失败,因为有3个槽,但有2个值。
这是你的A1
插入正在做的(轴=1在这里不重要):
In [22]: np.insert(A,C1,A1)
Out[22]: array([1, 2, 3, 4, 5, 6, 7])
In [23]: np.insert(A,C2,A1)
Out[23]: array([1, 0, 2, 0, 3, 4, 5, 6, 7])
由于A1
是(1,)形状,因此broadcast
可以匹配(0,)C1
和(2,)C2
的形状。
如果你想要两个0在一起,你需要一个:
In [25]: np.insert(A,[1],[0,0])
Out[25]: array([1, 0, 0, 2, 3, 4, 5, 6, 7])
In [26]: np.insert(A,[1,1],[0])
Out[26]: array([1, 0, 0, 2, 3, 4, 5, 6, 7])