找到numpy数组的最小值/最大值,不包括沿轴的零点

时间:2018-03-20 16:43:59

标签: python numpy

有一种很好的方法可以找到here中描述的除零之外的数组的非零最小值/最大值:

<div id="parent" contenteditable=true style="border: black 2px solid; height:200px">
  <div class = "root">hello</div>
  <div class = "root">*******</div>
  <div class = "root">world</div>
</div>

然而,只要select c.* from categories c left join users_categories uc on c.id = uc.category_id left join users u on u.id = uc.user_id and u.country_id = $country_id where u.id is null group by c.id 是2维或更多维数组并且需要最小/最大轴,这就不会起作用。有什么简单的解决方案吗?

2 个答案:

答案 0 :(得分:2)

这是 - 所谓的方法。可以通过将0值设置为a.min() / a.max()作为单独的步骤来进行矢量化。

import numpy as np

a = np.array([[1, 2, 0],
              [3, 1, 9],
              [0, 3, 4]])

minval = np.min(np.where(a==0, a.max(), a), axis=0)
# array([ 1.,  1.,  4.])

maxval = np.max(np.where(a==0, a.min(), a), axis=0)
# array([ 3.,  3.,  9.])

答案 1 :(得分:0)

屏蔽数组是专门为这些目的而设计的。您可以利用数组中的遮罩零(或您想要的任何其他种类的遮罩),现在就对遮罩数组中的常规数组执行几乎所有的工作:

import numpy.ma as ma
mx = ma.masked_array(x, mask=x==0)
mx.min(1)

示例输入:

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

输出:

[1.0 4.0 2.0]