【发布时间】:2020-03-04 16:17:03
【问题描述】:
尝试在矩阵中使用 numpy 高级索引 - https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html
这按预期工作,返回整个矩阵,v
import numpy as np
v = np.reshape(np.arange(0,9), (3,3))
v[np.asarray([0,1,2])[:,np.newaxis], np.asarray([0,1,2])]
使用逻辑索引也可以按预期工作:
v[np.asarray([0,1,2])[:,np.newaxis], np.asarray([True, True, True])]
令人惊讶的是(至少对我而言),切换索引向量的顺序时出现此错误?
v[np.asarray([True, True, True])[:,np.newaxis], np.asarray([0,1,2])]
或者如果两个向量都是布尔值
v[np.asarray([True, True, True])[:,np.newaxis], np.asarray([True, True, True])]
出现错误“*** IndexError:数组索引过多”。我希望第三个和第四个例子能像第一个和第二个一样工作。我错过了什么?
【问题讨论】:
-
docs.scipy.org/doc/numpy/reference/… - 这个布尔索引部分的最后一部分说您需要使用
np.ix_来生成相关索引。它将布尔值转换为等效的nonzero索引。广播不适用于布尔数组。 -
这是什么上下文,你想从数组中提取什么以及索引来自哪里?
-
@hpaulj 你是对的。广播只是不适用于布尔数组的高级索引。我很困惑,因为它看起来像示例 2 中的工作。如果你回答我会接受它
标签: python numpy indexing boolean