首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解NumPy二维数组子设置中方括号行为的差异

理解NumPy二维数组子设置中方括号行为的差异
EN

Stack Overflow用户
提问于 2018-06-26 13:04:31
回答 1查看 3.1K关注 0票数 2

我对python很陌生,并从基础知识中学习它。我有一个二维阵列(npb)

代码语言:javascript
复制
npb=np.array([[1,2],
              [3,4],
              [5,6],
              [7,8]]);

当正常进行减法(没有冒号)时,它会给出输出,

代码语言:javascript
复制
Input:       nph=np.array(npb[0][1])    
Output:      2

Input:       nph=np.array(npb[0 ,1])   
Output:      2

但是当使用冒号时,它会给出输出。

代码语言:javascript
复制
Input:       nph=np.array(npb[:][1])
Output:      3 ,4

Input:       nph=np.array(npb[: ,1])          
Output:      2 ,4, 6 ,8

即,和0,1给出相同的结果,而和:,1没有。为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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’不同。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51043650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档