我想通过有效地将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
很大时,这可能会变得无效。
答案 0 :(得分:2)
使用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]]
答案 1 :(得分:1)
根据@ Miket25的回答,实际上不需要添加np.where
层。 np.isin(A, [10, 1])
返回一个布尔数组,该数组可以完全用作索引。只需
A[np.isin(A, [10, 1])] = 0