python - 在 Numpy 数组中每行保留最大 N 个值

我需要在数组中每行保留最多 N (3) 个值。

a=np.array([[1,2,3,4],[8,7,6,5],[5,3,1,2]])
a
Out[135]: 
array([[1, 2, 3, 4],
       [8, 7, 6, 5],
       [5, 3, 1, 2]])

它们的索引可以用np.partition来识别:

n=3
np.argpartition(a, -n, axis=1)[:,-n:]
Out[136]: 
array([[1, 2, 3],
       [2, 1, 0],
       [3, 0, 1]], dtype=int64)

所以,我的问题是: 我应该如何保留这些索引的值并将其他索引设置为零以获得:

Out[136]: 
array([[0, 2, 3, 4],
       [8, 7, 6, 0],
       [5, 3, 0, 2]])

最佳答案

a=np.array([[1,2,3,4],[8,7,6,5],[5,3,1,2]])

n=3
mask = np.argpartition(a, -n, axis=1) < a.shape[1] - n

a[mask] = 0

https://stackoverflow.com/questions/68290728/

相关文章:

x86-64 - AVX512 与矢量比较不屏蔽

serialization - 使用#[serde(untagged)] 和#[serde(with

api - 通过 Bitbucket REST API 获取所有 Pull-Request 评论

python - 通用协议(protocol) : mypy error: Argument 1 h

django - 如何在基于 Django 类的 View 中更改模板

ios - 尝试执行 pod install "[!] FBReactNativeSpec has

ansible - 如何在ansible替换模块中转义+字符

html - 如何垂直对齐表格元素中的元素?

python - python模块上的cprofile

pandas - 不必要的 .list.item 嵌套在 pyarrow 上传数据框中的 BigQu