在某些条件下,找到两个数组之间(逐项)比率的最大值或最小值

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

【讨论】:

以上是关于在某些条件下,找到两个数组之间(逐项)比率的最大值或最小值的主要内容,如果未能解决你的问题,请参考以下文章

分而治之以找到二维数组中两个有序元素之间的最大差异

ArrayIndexOutOfBoundsException,同时找到数组中两个连续元素之间的最大差异

如何有效地逐项比较两个大 XML 文件?

我将如何找到具有以下条件的数组的最大总和?

分而治之算法找到两个有序元素之间的最大差异

Clickhouse - 矩阵逐项加法:如何对二维数组求和?