Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多维数组对于numpy的确切含义是什么?_Python_Python 3.x_Numpy_Multidimensional Array - Fatal编程技术网

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
都失败,因此必须依靠临时替代方案。