Numpy:多个值的索引
Numpy: Indices of multiple values
我想通过高效索引将二维数组的某些值设置为特定数字。
假设我有一个 2D numpy 数组,
A = array([[1, 6, 6],
[9, 7, 7],
[10, 2, 2]])
并且我想获取数组中属于一组数字的索引,比如 indList=[10, 1]
以便我可以将它们设置为零。但是,indList
可能是一个巨大的列表。
有没有不用 for 循环的更快的方法?
作为 for 循环,
indList = [10, 1]
for i in indList:
A[A==i] = 0
但是当 indList
很大时,这会变得低效。
使用 numpy,您可以通过首先找到 indList
中元素的索引然后将它们设置为零来对其进行矢量化。
A = np.array([[1, 6, 6],
[9, 7, 7],
[10 ,2 ,2]])
A[np.where(np.isin(A, [10,1]))] = 0
这给出了
A = [[0 6 6]
[9 7 7]
[0 2 2]]
从@Miket25 的回答来看,实际上不需要添加 np.where
层。 np.isin(A, [10, 1])
returns 一个完全可以接受的布尔数组作为索引。所以简单地做
A[np.isin(A, [10, 1])] = 0
我想通过高效索引将二维数组的某些值设置为特定数字。
假设我有一个 2D numpy 数组,
A = array([[1, 6, 6],
[9, 7, 7],
[10, 2, 2]])
并且我想获取数组中属于一组数字的索引,比如 indList=[10, 1]
以便我可以将它们设置为零。但是,indList
可能是一个巨大的列表。
有没有不用 for 循环的更快的方法?
作为 for 循环,
indList = [10, 1]
for i in indList:
A[A==i] = 0
但是当 indList
很大时,这会变得低效。
使用 numpy,您可以通过首先找到 indList
中元素的索引然后将它们设置为零来对其进行矢量化。
A = np.array([[1, 6, 6],
[9, 7, 7],
[10 ,2 ,2]])
A[np.where(np.isin(A, [10,1]))] = 0
这给出了
A = [[0 6 6]
[9 7 7]
[0 2 2]]
从@Miket25 的回答来看,实际上不需要添加 np.where
层。 np.isin(A, [10, 1])
returns 一个完全可以接受的布尔数组作为索引。所以简单地做
A[np.isin(A, [10, 1])] = 0