繁体   English   中英

Python中多维数组中的连接问题

[英]Issues with concatenation in multi-dimensional arrays in 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:\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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM