Python 替换numpy数组中小于;";每行中最大的项目

Python 替换numpy数组中小于;";每行中最大的项目,python,numpy,multidimensional-array,Python,Numpy,Multidimensional Array,我有大小为~70k*10k的2d numpy阵列。我想用零替换所有值,这些值小于每行中的“N”最大元素。例如: arr = np.array([[1, 0, 6, 5, 2, 5], [7, 5, 2, 6, 7, 3], [3, 5, 1, 5, 6, 4]]) 对于N=3,结果应为: result = np.array([[0, 0, 6, 5, 0, 5], # 3 largest in row: 6, 5, 5

我有大小为~70k*10k的2d numpy阵列。我想用零替换所有值,这些值小于每行中的“N”最大元素。例如:

arr = np.array([[1, 0, 6, 5, 2, 5], 
                [7, 5, 2, 6, 7, 3], 
                [3, 5, 1, 5, 6, 4]])
对于
N=3
,结果应为:

result = np.array([[0, 0, 6, 5, 0, 5], # 3 largest in row: 6, 5, 5
                   [7, 0, 0, 6, 7, 0], 
                   [0, 5, 0, 5, 6, 0]])

未替换的数字的位置和数组的形状应保持不变。

您可以使用查找第N个最大值,然后使用布尔索引替换行中“低于”该值的所有内容:

import numpy as np
arr = np.array([[1, 0, 6, 5, 2, 5], 
                [7, 5, 2, 6, 7, 3], 
                [3, 5, 1, 5, 6, 4]])

N = 3
nlargest = np.partition(arr, -N, axis=1)[:, -N]
arr[arr < nlargest[:, None]] = 0
arr
# array([[0, 0, 6, 5, 0, 5],
#        [7, 0, 0, 6, 7, 0],
#        [0, 5, 0, 5, 6, 0]])
将numpy导入为np
arr=np.数组([[1,0,6,5,2,5],
[7, 5, 2, 6, 7, 3], 
[3, 5, 1, 5, 6, 4]])
N=3
nlargest=np.partition(arr,-N,axis=1)[:,-N]
arr[arr
您自己尝试过什么吗?有没有关于如何做的想法?也有类似的问题,比如np.partition改变数组形状,这是我必须避免的。我得到的第三个谷歌结果是。这应该足以让你开始。你的第三个谷歌搜索结果大约是一个特定值(255)。我需要独立地为每一行确定N个最大值,因为在每一行中它们可能是不同的。我想找到最优雅的解决方案。对于相同的数组,但N=2,结果应该是什么?也就是说,如何处理重复?