我有一个关于NumPy高级索引的问题。
我发现了这个问题,但我猜我的问题稍微有点不同。
在下面的示例中,x_array
是预期的结果。但是当我使用一个列表时,结果会有所不同。
从numpy文档中得知:
当选择对象obj为非元组序列对象、ndarray(数据类型为整数或布尔型)或至少包含一个序列对象或ndarray(数据类型为整数或布尔型)的元组时,就会触发高级索引。高级索引有两种类型: 整数和布尔类型。
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]]
这也是我期望的行为。
@Eric
)关于“嵌入序列的序列”的示例,就像你的一样。vertices[idx_list], :]
明确告诉它将idx_list
应用于第一维,否则它会将其视为“索引元组”。 - hpauljSequences < NPY_MAXDIMS
中的Sequences
是指len(idx_list)
还是方括号中参数的数量,例如x[arg1, arg2]
? - Joe