首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在numpy中实现轴式赢家通吃的pythonic方法

问在numpy中实现轴式赢家通吃的pythonic方法
EN

Stack Overflow用户
提问于 2016-02-09 19:42:40
回答 2查看 447关注 0票数 10

我想知道什么是最简洁和最典型的方法,将2Dnumpy数组的每一行中只保留最大元素,而将所有其他元素设置为零。示例:

给定下面的numpy数组:

代码语言:javascript
复制
a = [ [1, 8, 3 ,6],
      [5, 5, 60, 1],
      [63,9, 9, 23] ]

我希望答案是:

代码语言:javascript
复制
b = [ [0, 8, 0, 0],
      [0, 0, 60, 0],
      [63,0, 0, 0 ] ]

我可以想出几种方法来解决这个问题,但我感兴趣的是是否有python函数来快速解决这个问题。

提前谢谢你

EN

回答 2

Stack Overflow用户

发布于 2016-02-09 19:57:56

您可以使用np.max沿一个轴获取最大值,然后使用np.where将非最大值元素清零:

代码语言:javascript
复制
np.where(a == a.max(axis=1, keepdims=True), a, 0)

keepdims=True参数在取最大值后保留单例维度(即a.max(1, keepdims=True).shape == (3, 1)),这简化了针对a的广播。

票数 11
EN

Stack Overflow用户

发布于 2016-02-09 20:01:34

我不知道python是什么,所以我假设大多数python特定的语法都是python。它使用了两个列表理解,这是python的特性。但在这种情况下,它可能不会那么简洁。

代码语言:javascript
复制
b = [[y if y == max(x) else 0 for y in x] for x in a ]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35291189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档