在某些条件下,找到两个数组之间(逐项)比率的最大值或最小值
Posted
技术标签:
【中文标题】在某些条件下,找到两个数组之间(逐项)比率的最大值或最小值【英文标题】: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 序列 【参考方案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
【讨论】:
以上是关于在某些条件下,找到两个数组之间(逐项)比率的最大值或最小值的主要内容,如果未能解决你的问题,请参考以下文章