【问题标题】:finding the max or min value in the (item wise) ratio between two arrays, under some conditions在某些条件下,找到两个数组之间(逐项)比率的最大值或最小值
【发布时间】:2020-03-21 08:36:00
【问题描述】:

我有两个 np.arrays x 和 y,并希望找到 y[i] 大于 0 的比率 x[i]/y[i] 的最小值,即:

x = np.array([1,2,3,4,5])
y = np.array([-1,0,1,2,3])
minimumratio(x,y)

应该返回 5/3。

只使用 min(x/y) 会产生 -1,并且可能会遇到除以 0 的错误。

【问题讨论】:

  • 对。发布的两个问题:(1)您只需要过滤掉 0-divide 的情况; (2) -1 四个定义比率中的最小值。这有什么问题?
  • 简单地从 y 数组中过滤掉 0 会使 y - 列表更短,并且与两个数组的索引不匹配。我正在尝试获得一个忽略y小于0的任何比率的函数。我考虑过过滤y,即:y = y [y> 0]但是我还需要过滤掉x中的相应值(以某种方式)。
  • 如果 y != 0 则流式传输新的 x/y 序列

标签: python numpy max minimum


【解决方案1】:

我通过以下方式贯穿您的任务:在结果仍然为正的条件下找到x/y 的最小值。

因此,我将屏蔽数组以消除所有我们不想考虑的情况,例如数字之一为负数或y 的元素为零。

您可以通过将数组中的这些位置设置为 np.nan 来做到这一点:

x = np.array([1,2,3,4,5], dtype=np.float)
y = np.array([-1,0,1,2,3], dtype=np.float)

y_cleared = np.copy(y)
y_cleared[y == 0] = np.nan # get rid of zeros
y_cleared[y < 0] = np.nan # get rid of negative values
y_cleared[x < 0] = np.nan # get rid of negative values
y_cleared
>>> array([nan, nan,  1.,  2.,  3.])

然后有一些特殊的 numpy 方法可以处理数组并忽略 np.nan 之类的:

np.nanmin(x/y_cleared)
>>> 1.6666666666666667

【讨论】:

    猜你喜欢
    • 2019-06-11
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 2020-11-06
    相关资源
    最近更新 更多