我想知道在将所有其他元素设置为零时,最简洁和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函数可以快速实现这一点
提前谢谢
答案 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}}