Python 当我给出一个包含两个不同形状的数组的列表时,np.array()不起作用

Python 当我给出一个包含两个不同形状的数组的列表时,np.array()不起作用,python,numpy,Python,Numpy,这是一个密码。我列了一个清单,包括两个不同形状的阵列 d = [] a = np.arange(183).reshape(3,61) b = np.arange(51).reshape(3,17) d = [a,b] np.array(d) 错误如下所示 File "C:\Program Files\JetBrains\PyCharm 2019.1.1\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile

这是一个密码。我列了一个清单,包括两个不同形状的阵列

d = []

a = np.arange(183).reshape(3,61)
b = np.arange(51).reshape(3,17)

d = [a,b]

np.array(d)
错误如下所示

 File "C:\Program Files\JetBrains\PyCharm 2019.1.1\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "D:/dev/workspace/rl/test/npcopy.py", line 10, in <module>
    np.array(d)
ValueError: could not broadcast input array from shape (3,61) into shape (3)

它起作用了!!太奇怪了

因为矩阵的维数不同

> a = np.arange(183).reshape(3,61) b = np.arange(51).reshape(3,17)
> d=[np.array(a),np.array(b)] 
>  print(d) for output
> 
> or  d=[a,b]
>  np.concatenate(d, axis=1)

因为矩阵的维数不同

> a = np.arange(183).reshape(3,61) b = np.arange(51).reshape(3,17)
> d=[np.array(a),np.array(b)] 
>  print(d) for output
> 
> or  d=[a,b]
>  np.concatenate(d, axis=1)

我没有使用np.copy,而是选择使用copy.deepcopy。即使列表中两个项目的第一个形状相同,它也可以工作。

我选择使用copy.deepcopy而不是np.copy。即使列表中两个项目的第一个形状相同,它也可以工作。

当您尝试使用数组创建数组时,可能会出现三种结果:

如果阵列具有相同的形状,则结果是高维阵列:

In [295]: np.array((np.zeros((2,3),int),np.ones((2,3),int)))                 
Out[295]: 
array([[[0, 0, 0],
        [0, 0, 0]],

       [[1, 1, 1],
        [1, 1, 1]]])
In [296]: _.shape                                                            
Out[296]: (2, 2, 3)
如果数组的形状不同,则结果可能是类似于列表的对象数据类型数组:

但对于某些形状组合,结果是错误的:

In [301]: np.array((np.zeros((2,3),int),np.ones((2,4),int)))                 
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-301-d67e6685581d> in <module>
----> 1 np.array((np.zeros((2,3),int),np.ones((2,4),int)))

ValueError: could not broadcast input array from shape (2,3) into shape (2)

尝试从阵列生成阵列时,可能会出现三种结果:

如果阵列具有相同的形状,则结果是高维阵列:

In [295]: np.array((np.zeros((2,3),int),np.ones((2,3),int)))                 
Out[295]: 
array([[[0, 0, 0],
        [0, 0, 0]],

       [[1, 1, 1],
        [1, 1, 1]]])
In [296]: _.shape                                                            
Out[296]: (2, 2, 3)
如果数组的形状不同,则结果可能是类似于列表的对象数据类型数组:

但对于某些形状组合,结果是错误的:

In [301]: np.array((np.zeros((2,3),int),np.ones((2,4),int)))                 
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-301-d67e6685581d> in <module>
----> 1 np.array((np.zeros((2,3),int),np.ones((2,4),int)))

ValueError: could not broadcast input array from shape (2,3) into shape (2)

为什么不只用a+b呢?试试:np.concatenated,axis=1。你不能将两个不同维度的矩阵合并成一个n维数组你在寻找什么样的结果形状?3x78?那么d=[a,b]就足够了,为什么np.arrayd?为什么不只使用a+b?试试:np.concatenated,axis=1。你不能将两个不同维度的矩阵合并成一个n维数组你在寻找什么样的结果形状?3x78?那么d=[a,b]就足够了,为什么np.arrayd?谢谢你的回答!所以这是一个小虫子?你建议解决这个问题?我不会把它描述成一个bug。第一种情况是正常的预期行为。从某种意义上说,其他的都是一些处理不良输入的方法。我希望np.array在这两种情况下都会抛出错误,除非指定了对象数据类型。我建议了制作对象数据类型数组最可靠的方法。谢谢你的回答!所以这是一个小虫子?你建议解决这个问题?我不会把它描述成一个bug。第一种情况是正常的预期行为。从某种意义上说,其他的都是一些处理不良输入的方法。我希望np.array在这两种情况下都会抛出错误,除非指定了对象数据类型。我提出了制作对象数据类型数组的最可靠方法。