python - Python/Numpy:获取二维矩阵中的前 k 个最大值作为掩码
问题描述
假设我有一个像这样的 3x3 矩阵:
array([[8, 6, 3],
[6, 7, 2],
[0, 8, 9]])
现在我想获取矩阵中前 k 个最大值,并从中创建一个掩码。如果数字在前 k 中最大,则值为 1,否则为 0。令k=2
. 在上面的例子中,有 19
和 2 8
,我们需要把它们都取走,所以返回的掩码是这样的:
array([[1, 0, 0],
[0, 0, 0],
[0, 1, 1]])
解决方案
这个怎么样?
def is_topk(a, k=1):
_, rix = np.unique(-a, return_inverse=True)
return np.where(rix < k, 1, 0).reshape(a.shape)
您的阵列上的示例:
>>> is_topk(a, 1)
array([[0, 0, 0],
[0, 0, 0],
[0, 0, 1]])
>>> is_topk(a, 2)
array([[1, 0, 0],
[0, 0, 0],
[0, 1, 1]])
推荐阅读
- netty - 在 EmbeddedChannel 上并行执行 Netty 消息
- java - 将对象转换为 JSON 字符串时发生 JsonMappingException - org.apache.avro.AvroRuntimeException:不是数组:
- asp.net - 从后面的代码中禁用 asp.net 日历回发
- python - 使用 try,但使用 Maya Python 检查以确保选择中的项目是正确的节点类型
- pandas - 具有动态组成员身份的 Pandas groupby
- python - 在 Python 中将氨基酸转换为整数
- reactjs - React Native - 文件永远编译(可能是无限循环?)
- javascript - React Redux 未在状态更新时呈现
- tensorflow - `tf.keras.applications.xception.preprocess_input` 在做什么?
- python - 如何找到递归结果的总和