给定下面这种形式的numpy数组:
x = [[4.,3.,2.,1.,8.],[1.2,3.1,0.,9.2,5.5],[0.2,7.0,4.4,0.2,1.3]]
有没有一种方法可以在Python中保留每行的前三个值并将其他值设为零(无需使用显式循环)。 在上面的示例中,结果应该是:
x = [[4.,3.,0.,0.,8.],[0.,3.1,0.,9.2,5.5],[0.0,7.0,4.4,0.0,1.3]]
一个示例的代码
import numpy as np
arr = np.array([1.2,3.1,0.,9.2,5.5,3.2])
indexes=arr.argsort()[-3:][::-1]
a = list(range(6))
A=set(indexes); B=set(a)
zero_ind=(B.difference(A))
arr[list(zero_ind)]=0
输出:
array([0. , 0. , 0. , 9.2, 5.5, 3.2])
以下是我针对一个一维numpy数组的样本代码(有很多行)进行的翻译。如果要遍历numpy数组的每一行并重复执行此计算,这将是非常昂贵的。是否有更简单的方法?