Python 多维数组对于numpy的确切含义是什么?
有人能告诉我为什么Python 多维数组对于numpy的确切含义是什么?,python,python-3.x,numpy,multidimensional-array,Python,Python 3.x,Numpy,Multidimensional Array,有人能告诉我为什么a可以工作而b不能与ValueError一起工作吗?说的是“多维”原因,但就我而言,我认为a和b是相同的 import numpy as np a=np.array([[1],2,3]) b=np.array([1,2,[3]]) Numpy正在观察第一个元素,以查看数组的数据类型。对于a它会看到一个列表,因此会生成一个对象数组。它很高兴地继续将其余元素填充到对象数组中。对于b,它会看到一个数值,并假设它是某个数值dtype。当它到达一个列表时,它就停止了 您可以通过首先声
a
可以工作而b
不能与ValueError一起工作吗?说的是“多维”原因,但就我而言,我认为a
和b
是相同的
import numpy as np
a=np.array([[1],2,3])
b=np.array([1,2,[3]])
Numpy正在观察第一个元素,以查看数组的数据类型。对于a
它会看到一个列表,因此会生成一个对象
数组。它很高兴地继续将其余元素填充到对象
数组中。对于b
,它会看到一个数值,并假设它是某个数值dtype
。当它到达一个列表时,它就停止了
您可以通过首先声明object
dtype来覆盖此选项
a=np.array([[1],2,3])
b=np.array([1,2,[3]], 'object')
print(a, b, sep='\n\n')
[list([1]) 2 3]
[1 2 list([3])]
请注意,这可能不是Numpy识别dtype
的确切方式,但它必须非常接近。因此list([1])
意味着它只是一个列表,而不是Numpy列表,因为它看到了一个列表,因此生成了一个对象数组。这真的不可能那么简单,因为例如[[1]、[2]、[3]]
在第一个位置看起来完全一样。@PaulPanzer你当然是对的。但这是最简单的表达观点的方法。Numpy正在做一些检查。这些检查无法正确猜测b=np。数组([1,2,[3]])
从混合嵌套的列表生成数组是一件棘手的事情np.array
首先尝试创建常规多维数组。它对a
和b
都失败,因此必须依靠临时替代方案。