Python中多维数组的连接问题



我试图将AC1C2连接起来。对于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])

相关内容

  • 没有找到相关文章

最新更新