为什么np.where(...)[-1]无法返回数组的最后一个匹配元素?
问题根因
你对np.where()的返回结构理解错了:
- 无论输入数组是几维,
np.where(condition)的返回值都是元组,元组的元素个数等于输入数组的维度数,每个元素是一个一维数组,存的是对应维度上所有满足条件的坐标值。 - 你的输入是一维数组,所以拿到的
result是长度为1的元组,里面唯一的元素才是存了所有匹配下标的数组array([1, 9, 12])。 - 此时写
result[-1],本质是对长度为1的元组取最后一个元素,拿到的自然是整个下标数组,输出就是[1 9 12],根本不是对下标数组取最后一位。
正确实现
要拿到最后一个匹配项的下标,需要先从元组里取出对应维度的下标数组,再对这个数组取最后一位:
import numpy as np my_array = np.array([1, 2, 1, 1, 3, 4, 3, 1, 1, 2, 1, 1, 2]) # 一维数组对应元组第0位的下标数组,取数组最后一位 result = np.where(my_array==2) last_idx = result[0][-1] print(last_idx)
运行后即可得到预期输出12。
补充:如果是二维数组,
np.where返回的元组会包含两个一维数组,分别对应行坐标、列坐标,取匹配位置时需要分别索引两个数组的对应位置。
内容的提问来源于stack exchange,提问作者nihad aliyev
相关产品推荐
相关产品推荐

