我是python的新手,从基础开始学习。 我有一个二维数组 (npb(
npb=np.array([[1,2],
[3,4],
[5,6],
[7,8]]);
当正常做子集(没有冒号(时,它会给出输出,
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
即,[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] 是第 2 项,即列表[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 存储 2-D 数组的方式。但是,(:,1( 表示all rows, column 1
- 显然与您从npb[:][1]
中获得的"来自 npb[:] 的元素 1"不同。