Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么NumPy高级索引为列表列表和NumPy数组生成不同的结果?_Python_Numpy - Fatal编程技术网

Python 为什么NumPy高级索引为列表列表和NumPy数组生成不同的结果?

Python 为什么NumPy高级索引为列表列表和NumPy数组生成不同的结果?,python,numpy,Python,Numpy,我有一个关于NumPy的高级索引的问题 我发现了一个问题,但我想我的问题有点不同 在下面的示例中,x_array是预期结果。但是,当我用同样的方法尝试列表时,结果是不同的 从numpy文档: 当选择对象obj是一个对象时,会触发高级索引 非元组序列对象,一个ndarray(数据类型为integer或bool), 或至少有一个序列对象或数据类型的ndarray的元组 整数或布尔)。有两种类型的高级索引:整数 和布尔值 idx_list应该触发高级索引,因为它是“非元组序列对象”,或者列表和元组在这

我有一个关于NumPy的高级索引的问题

我发现了一个问题,但我想我的问题有点不同

在下面的示例中,
x_array
是预期结果。但是,当我用同样的方法尝试列表时,结果是不同的

从numpy文档:

当选择对象obj是一个对象时,会触发高级索引 非元组序列对象,一个ndarray(数据类型为integer或bool), 或至少有一个序列对象或数据类型的ndarray的元组 整数或布尔)。有两种类型的高级索引:整数 和布尔值

idx_list
应该触发高级索引,因为它是“非元组序列对象”,或者列表和元组在这里是相同的,并且是“至少有一个序列对象的元组”

使用列表产生的结果与传递两个列表条目时的结果相同,两个列表条目在方括号内用逗号分隔(每个维度一个)


这也是我所期望的行为。

归根结底,这要归结为

来自numpy的索引文档:

为了保持向后兼容,与数字中的常用用法保持一致, 如果选择对象为任何对象,也会启动基本切片 包含切片对象的非ndarray序列(如列表),则 省略号对象或newaxis对象,但不适用于整数数组或 其他嵌入序列

具有列表的示例触发了向后兼容逻辑的未记录部分,如源代码中的注释所述:

/*
 * Sequences < NPY_MAXDIMS with any slice objects
 * or newaxis, Ellipsis or other arrays or sequences
 * embedded, are considered equivalent to an indexing
 * tuple. (`a[[[1,2], [3,4]]] == a[[1,2], [3,4]]`)
 */
/*
*具有任何切片对象的序列
由于历史原因,这是一个尚未清理的不一致性;可能有旧代码需要这种行为。因此,这与上面提到的链接中的问题是相同的?从某些方面来说,我在链接中的回答是引用代码(通过
@Eric
)中有关
序列的内容,其中包含。。。嵌入的序列
。这个例子和你的一样<代码>顶点[idx_列表],:]明确地告诉它将
idx_列表
应用于第一维度,否则它将其视为一个
索引元组
序列中的
序列
引用
len(idx_列表)
或方括号内的参数数量,如
x[arg1,arg2]
?发布您自己问题的答案总是可以的。
x_list_2 = vertices[idx_list[0], idx_list[1]] 
/*
 * Sequences < NPY_MAXDIMS with any slice objects
 * or newaxis, Ellipsis or other arrays or sequences
 * embedded, are considered equivalent to an indexing
 * tuple. (`a[[[1,2], [3,4]]] == a[[1,2], [3,4]]`)
 */