numpy 如何在切片上使用np.argwhere时获取原始数组中的索引?

hgb9j2n6  于 2023-05-17  发布在  其他
关注(0)|答案(2)|浏览(129)

我在数组元素的子集上使用函数np.argwhere(),但我需要它返回满足原始数组条件的元素的索引,而不是切片。有办法吗?
示例代码如下:

A = np.array([1,2,3,4,5,6,7,8,9])
i = [0, 3, 6, 7, 8]
np.argwhere(A[i] < 8)

Output: array([[0], [1], [2]])

我想要的输出是
array([[0], [3], [6]])

bksxznpy

bksxznpy1#

np.argwhere给出了切片中的索引。我们已经知道如何将切片中的索引转换为数组中的索引:切片中的索引x对应于数组中的索引i[x],所以我们只需要用np.argwhere的结果索引到i

A = np.array([1,2,3,4,5,6,7,8,9])
i = np.array([0, 3, 6, 7, 8])

slice_lt8 = np.argwhere(A[i] < 8)
arr_lt8 = i[slice_lt8]

arr_lt8现在是期望值:

array([[0],
       [3],
       [6]])
anhgbhbe

anhgbhbe2#

import numpy as np

A = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
i = [0, 3, 6, 7, 8]
argA = np.argwhere(A[i]<8)
argList = [argA[idx][0] for idx in range(len(argA))]

desList = [i[idx] for idx in argList]
desListOfLists = [[x] for x in desList]
desArray = np.array(desListOfLists)

由于其他读者可能想要稍微不同的输出类型,我已经包括了三个:list; list of lists和ndarray:
desList生成

[0, 3, 6]

desListOfLists生成

[[0], [3], [6]]

desArray生成

array([[0], [3], [6]])

这是最初的要求

相关问题