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在这两种情况下都会抛出错误,除非指定了对象数据类型。我提出了制作对象数据类型数组的最可靠方法。