我以前看過一兩次,但我似乎找不到任何官方文檔:range在 numpy 中使用 python對象作為索引。import numpy as npa = np.arange(9).reshape(3,3)a[range(3), range(2,-1,-1)]# array([2, 4, 6])讓我們觸發(fā)一個索引錯誤,以確認(rèn)范圍不在合法索引方法的官方范圍內(nèi)(雙關(guān)語):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現(xiàn)在,numpy 與其文檔之間的細微差異并非完全聞所未聞,也不一定表明該功能不是有意為之(參見此處的示例)。那么,有沒有人知道這為什么有效?如果它是一個預(yù)期的功能,它的確切語義是什么/它有什么好處?是否有任何 ND 概括?
2 回答

喵喵時光機
TA貢獻1846條經(jīng)驗 獲得超7個贊
總結(jié)一下(感謝評論中的@WarrenWeckesser):這種行為實際上已記錄在案。人們只需要意識到range對象是嚴(yán)格意義上的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
添加回答
舉報
0/150
提交
取消