在numpy中,轴向赢家通过的pythonic方式

时间:2016-02-09 11:42:40

标签: python numpy

我想知道在将所有其他元素设置为零时,最简洁和pythonic方法是仅保留2D numpy数组的每一行中的最大元素。例如:

给出以下numpy数组:

a = [ [1, 8, 3 ,6],
      [5, 5, 60, 1],
      [63,9, 9, 23] ]

我希望答案是:

b = [ [0, 8, 0, 0],
      [0, 0, 60, 0],
      [63,0, 0, 0 ] ]

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

提前谢谢

2 个答案:

答案 0 :(得分:10)

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

np.where(a == a.max(axis=1, keepdims=True), a, 0)

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

答案 1 :(得分:0)

不知道什么是pythonic,所以我假设大多数python特定语法的方式是pythonic。 它使用了两个列表理解,这是python的特性。但通过这种方式,它可能不那么简洁。

{{1}}