[英]Issues with concatenation in multi-dimensional arrays in Python
我正在尝试将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:\Users\USER\anaconda3\lib\site-packages\numpy\lib\function_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]] 放置在插槽B2
失败,因为有 3 个插槽,但有 2 个值。
这是您的A1
插件正在执行的操作(axis=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])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.