Python 理解NumPy 2D数组子设置中方括号行为的差异
我是python新手,从基础学习python。 我有一个二维阵列(npb) 正常进行子集设置时(不带冒号),则会给出输出Python 理解NumPy 2D数组子设置中方括号行为的差异,python,Python,我是python新手,从基础学习python。 我有一个二维阵列(npb) 正常进行子集设置时(不带冒号),则会给出输出 Input: nph=np.array(npb[0][1]) Output: 2 Input: nph=np.array(npb[0 ,1]) Output: 2 但当使用冒号时,它会给出输出 Input: nph=np.array(npb[:][1]) Output: 3 ,4 Input
Input: nph=np.array(npb[0][1])
Output: 2
Input: nph=np.array(npb[0 ,1])
Output: 2
但当使用冒号时,它会给出输出
Input: nph=np.array(npb[:][1])
Output: 3 ,4
Input: nph=np.array(npb[: ,1])
Output: 2 ,4, 6 ,8
i、 例如,[0][1]和[0,1]给出了相同的结果,而[:][1]和[:,1]没有给出相同的结果。为什么?这两种索引方法虽然外观相似,但本质上是不同的,尽管它们在寻址数组的单个元素时产生相同的结果
npb[x][y]
被Python解释为(nbp[x])[y]
,即:
-从npb中获取元素x,然后从前者的结果中获取元素y。因此,对于npb[0][1]:npb[0]是[1,2],而[1,2][1]是2。在这里,您将npb简单地视为一个列表列表。使用
npb[:][1]
,Python可以看到(npb[:])[1]
,因此:npb[:]
是npb的副本,[1]是第二项,即列表[3,4]
npb[x,y]
是用于numpy
对象(以及其他类似的东西,如数据帧)的特殊选择器,Python将其读取为:get(x,y)from npb
,其中x表示要获取的行和y-哪些列。这样的复合索引对大多数Python集合对象无效——它只适用于专门为处理它而设计的对象,如numpy.array。现在(0,1)表示第0行第1列-恰好与npb[0][1]相同,即“npb[0]中的元素1”,这仅仅是因为numpy存储二维数组的方式。然而,(:,1)意味着所有行,第1列
-显然不同于npb[:][1]
npb[:]
是npb
的副本,因此npb[:][1]
只是npb[1]
Input: nph=np.array(npb[:][1])
Output: 3 ,4
Input: nph=np.array(npb[: ,1])
Output: 2 ,4, 6 ,8