【发布时间】:2018-11-11 18:05:28
【问题描述】:
当我运行这段代码时:
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
print(np.where(a > 2))
得到a > 2 的索引数组是很自然的,即[2, 3, 4, 5],但我们得到的是:
(array([2, 3, 4, 5], dtype=int64),)
即第二个成员为空的元组。
那么,要得到numpy.where的“自然”答案,我们必须这样做:
np.where(a > 2)[0]
这个元组有什么意义?在什么情况下有用?
注意:我在这里只谈论用例 numpy.where(cond) 而不是同样存在的 numpy.where(cond, x, y)(参见文档)。
【问题讨论】:
-
注意:我已经阅读了stackoverflow.com/questions/5642457/…,但它没有解释这部分。
-
(3,)是一个单元素元组。没有“第二个元素”,无论是否为空。 -
是的@hpaulj,但是如果
w = ([13, 14, 15], ),那么我们仍然需要w[0][1]来获得14 而不是w[1],这就是我的意思:[0]是检索 元组的第一个元素. -
np.where使用np.nonzero,它更明确地返回一个元组,每个维度一个数组。它不是特例 1d。 -
最初我认为这允许使用例如元组索引
a[np.where(a > 2)],但实际上这适用于有或没有一元元组的一维情况。