我对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给出相同的结果,而和:,1没有。为什么?
发布于 2018-06-26 13:52:23
这两种索引方法虽然外观相似,但本质上是不同的,尽管它们在处理数组的单个元素时产生相同的结果。
Python将npb[x][y]解释为(nbp[x])[y],即:从npb获取元素x,然后从前者的结果中获取元素y。因此,对于npb: npb是1, 2,1,2是2。在这里,您将npb简单地看作一个列表。使用npb[:][1],Python可以看到(npb[:])[1],因此:npb[:]是npb的副本,其中1是第二项,即列表[3,4]。
npb[x,y]是numpy对象(以及其他类似的东西,如dataframes)的一个特殊选择器,它被get (x,y) from npb读取为:get (x,y) from npb,其中x表示要获取的行和y-哪个列。这样的复合索引对于大多数Python集合对象都无效--它只适用于专门为处理它而制作的东西,比如numpy.array。现在( 0,1)表示行0,列1-恰好与npb[0][1]相同,即‘npb中的元素1’,这仅仅是因为numpy存储二维数组的方式。但是,(:,1)指的是all rows, column 1 --显然与使用npb[:][1]获得的‘npb元素1’不同。
https://stackoverflow.com/questions/51043650
复制相似问题