我對NumPy的高級索引有疑問。爲什麼NumPy高級索引會爲列表和numpy數組列表產生不同的結果?
我發現this的問題,但我想我的問題稍有不同。
在下面的示例中,x_array
是預期結果。但是,當我嘗試與列表相同的結果是不同的。
從numpy的DOC:
高級索引被觸發時選擇對象obj是 非元組序列對象,ndarray(數據類型整數或布爾的), 或元組至少有一個序列對象或ndarray(數據類型爲 integer或bool)。有兩種類型的高級索引:整數 和布爾值。
import numpy as np
vertices = np.arange(9).reshape((3,3))
idx_list = [[0, 1, 2],
[0, 2, 1]]
x_list = vertices[idx_list]
print('list')
print(x_list)
#this works as expected
idx_array = np.array(idx_list)
x_array = vertices[idx_array]
print('array')
print(x_array)
idx_list
應該觸發高級索引,因爲它是一個「無元組序列對象?」或者是一個列表和一個元組在這裏是相同的,它是「一個至少包含一個序列對象的元組」
使用列表時產生的結果與傳遞由方括號內的逗號分隔的兩個列表條目爲每個維度)。
x_list_2 = vertices[idx_list[0], idx_list[1]]
這也是我期望的行爲。
這是未得到清理歷史不一致原因;可能會有舊代碼期望這種行爲。 – hpaulj
所以它是在上面提到的鏈接相同的問題? – Joe
我在鏈接中回答的一些方法是從代碼(通過'@ Eric')引用'嵌入序列...'的序列。這個例子就像你的例子。 'vertices [idx_list],:]'明確地告訴它將idx_list應用到第1維,否則它將它視爲'索引元組'。 – hpaulj