python - 使numpy 2d数组中每行中除最大n元素之外的所有元素为零

标签 python numpy numpy-ndarray

假设我有一个 2D numpy数组如:

[[1, 8, 3, 4, 5],
 [10,13,13,12,15]]

我想将除每行中最大或最大 2 个元素之外的所有元素都转换为零。我想得到的输出是:
[[0, 8, 0,0, 5],
 [0,13,13,0,15]]

我怎样才能做到这一点?

最佳答案

只有一行代码且没有循环 :

a = np.asarray([[1, 8, 3, 4, 5],
                [10,13,13,12,15]])
n_max = 2 # second max element

a * (a >= np.sort(a, axis=1)[:,[-n_max]]).astype(int)
输出:
array([[ 0,  8,  0,  0,  5],
       [ 0, 13, 13,  0, 15]])
对列做同样的事情......
a = np.asarray([[1, 8, 3, 4, 5],
                [10,13,13,12,15],
                [6, 9, 12,7, 7],
                [3, 8, 5 ,22, 2]])
n_max = 2 # second max element

a * (a >= np.sort(a, axis=0)[[-n_max],:]).astype(int)
输出:
array([[ 0,  0,  0,  0,  0],
       [10, 13, 13, 12, 15],
       [ 6,  9, 12,  0,  7],
       [ 0,  0,  0, 22,  0]])

关于python - 使numpy 2d数组中每行中除最大n元素之外的所有元素为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56321906/

相关文章:

python - numpy 广播 bool 索引

python - typeError: 'NoneType' 对象没有属性 '__getitem__' python

python - 如何将 2D numpy 数组与 3D 数组进行矩阵相乘以得到 3D 数组?

python - Numpy:为列表中的每个数组的 np.array 的每一行乘以 (1/2)^k

python-3.x - 按列构造一个带有 dtypes 的 numpy 数组

python - 在异步生成器函数中从托儿所内部产生 yield 不好吗?

python - 如何为可迭代抽象基类编写类型提示?

python - 使 python 代码兼容 2.7 和 3.6+ 版本 - 关于队列模块

python - Boost Python Numpy - 未定义的初始化引用

Python ascii编码问题