为了账号安全,请及时绑定邮箱和手机立即绑定

使用 python 范围对象索引到 numpy 数组

使用 python 范围对象索引到 numpy 数组

侃侃尔雅 2021-08-05 18:09:45
我以前看过一两次,但我似乎找不到任何官方文档:range在 numpy 中使用 python对象作为索引。import numpy as npa = np.arange(9).reshape(3,3)a[range(3), range(2,-1,-1)]# array([2, 4, 6])让我们触发一个索引错误,以确认范围不在合法索引方法的官方范围内(双关语):a['x']# Traceback (most recent call last):#   File "<stdin>", line 1, in <module># IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices现在,numpy 与其文档之间的细微差异并非完全闻所未闻,也不一定表明该功能不是有意为之(参见此处的示例)。那么,有没有人知道这为什么有效?如果它是一个预期的功能,它的确切语义是什么/它有什么好处?是否有任何 ND 概括?
查看完整描述

2 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

总结一下(感谢评论中的@WarrenWeckesser):这种行为实际上已记录在案。人们只需要意识到range对象是严格意义上的Python 序列。


所以这只是花哨的索引的一个例子。但是请注意,它非常慢:


>>> a = np.arange(100000)

>>> timeit(lambda: a[range(100000)], number=1000)

12.969507368048653

>>> timeit(lambda: a[list(range(100000))], number=1000)

7.990526253008284

>>> timeit(lambda: a[np.arange(100000)], number=1000)

0.22483703796751797


查看完整回答
反对 回复 2021-08-05
  • 2 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号