Python 单支架Numpy阵列和双支架Numpy阵列之间的区别?
这两个numpy对象之间有什么区别Python 单支架Numpy阵列和双支架Numpy阵列之间的区别?,python,numpy,Python,Numpy,这两个numpy对象之间有什么区别 import numpy as np np.array([[0,0,0,0]]) np.array([0,0,0,0]) 当您定义一个带有两个方括号的数组时,您真正要做的是声明一个包含4个0的数组。因此,如果您想访问第一个零,您将访问 您的_数组[0][0]而在第二个数组中,您只需访问您的数组[0]。也许一个更好的可视化方法是 array: [ [0,0,0,0], ] vs 前者是一个1 x 4的二维数组,后者是一个4元素的一维数组。单括号和双括号的区别
import numpy as np
np.array([[0,0,0,0]])
np.array([0,0,0,0])
当您定义一个带有两个方括号的数组时,您真正要做的是声明一个包含4个0的数组。因此,如果您想访问第一个零,您将访问
您的_数组[0][0]
而在第二个数组中,您只需访问您的数组[0]
。也许一个更好的可视化方法是
array: [
[0,0,0,0],
]
vs
前者是一个1 x 4的二维数组,后者是一个4元素的一维数组。单括号和双括号的区别从列表开始:
In [91]: ll=[0,1,2]
In [92]: ll1=[[0,1,2]]
In [93]: len(ll)
Out[93]: 3
In [94]: len(ll1)
Out[94]: 1
In [95]: len(ll1[0])
Out[95]: 3
ll
是一个包含3项的列表ll1
是一个包含1项的列表;那个项目是另一个列表。请记住,列表可以包含各种不同的对象、数字、字符串、其他列表等
这两个表达式有效地从两个这样的列表中生成数组
In [96]: np.array(ll)
Out[96]: array([0, 1, 2])
In [97]: _.shape
Out[97]: (3,)
In [98]: np.array(ll1)
Out[98]: array([[0, 1, 2]])
In [99]: _.shape
Out[99]: (1, 3)
此处列表列表已转换为二维数组。以一种微妙的方式numpy
模糊了列表和嵌套列表之间的区别,因为两个数组之间的区别在于它们的形状,而不是基本结构array(ll)[None,:]
生成(1,3)
版本,而array(ll1).ravel()生成(3,)
版本
最终的结果是,单括号和双括号之间的区别在于数组维度的数量不同,但我们不应该忽视Python首先创建不同列表的事实。维度。看看今天早些时候的类似问题:对于np.array
,最好使用x[0,0]进行索引
numpy
数组比嵌套列表具有更强大的索引方法。没错,但对于提出此类问题的人,我认为这可能是一种更简单的解释方法,符号(4,)是什么意思?4行和未定义的列数?为什么第二个操作的结果不是(,4)?shape
属性返回一个标准的pythontuple
,其中数字是每个维度的元素数。因此,(4,)
是一个标准的1元素python元组,元素的值为4
<代码>(,4)
不是有效的元组。我不确定,但(4,)并不意味着只有4行和一列,即,它是一维数组?(1,4)的第二个输出将意味着1行4列,因此不应该表示输出有4个维度,因为它有4列?后者(4,)
数组没有任何“列”,因为它是1d。有列意味着它是2d。@匿名用户ll1
它仍然是一个只有1项的列表(但该项是3项的列表)
In [91]: ll=[0,1,2]
In [92]: ll1=[[0,1,2]]
In [93]: len(ll)
Out[93]: 3
In [94]: len(ll1)
Out[94]: 1
In [95]: len(ll1[0])
Out[95]: 3
In [96]: np.array(ll)
Out[96]: array([0, 1, 2])
In [97]: _.shape
Out[97]: (3,)
In [98]: np.array(ll1)
Out[98]: array([[0, 1, 2]])
In [99]: _.shape
Out[99]: (1, 3)