使用2索引从数组中提取最小值[关闭]

Posted

技术标签:

【中文标题】使用2索引从数组中提取最小值[关闭]【英文标题】:extract minimum value from array using 2 index [closed] 【发布时间】:2016-10-10 01:55:55 【问题描述】:

我有一个表格,其中 x 和 y 分别代表行的头部和列的头部。使用两个索引 (x1,y1) 我必须在表中输入并选择 z 中报告的最小值。为了更清楚,用 x1 我将识别 i 和 i+1 行,用 y1 识别 j 和 j+1 列,这意味着 z 中的四个值,我只需要提取它们之间的最小值。

这是桌子:

x = np.array([100., 200., 300., 400., 500., 600.])
y = np.array([20., 300., 450., 500., 550.])
z = np.array([[1., 1., 1., 1., 1.02, 1.05],
              [1., 1., 1., 1., 1.01, 1.05],
              [1., 1., 1., 1., 1.01, 1.04],
              [1., 1., 1., 1.01, 1.07, 1.18],
              [1., 1., 1., 1.01, 1.09, 1.23]])

x1, y1 = 550, 525

我想在z 中找到最小值。 例如,在这种情况下应该是1.07

感谢您的 cmets,特别是 Toby Speight 的指示,我以这种方式改进了代码:

x = np.array([100., 200., 300., 400., 500., 600.])

y = np.array([20., 300., 450., 500., 550.])

z = np.array([[1., 1., 1., 1., 1.02, 1.05],
              [1., 1., 1., 1., 1.01, 1.05],
              [1., 1., 1., 1., 1.01, 1.04],
              [1., 1., 1., 1.01, 1.07, 1.18],
              [1., 1., 1., 1.01, 1.09, 1.23]])



xmin, xmax = 100,600
ymin, ymax = 20, 550

x1, y1 = 600, 350

if x1 > xmax:
   x1 = xmax
   if x1 < xmin:
      x1 = xmin
else:
   x1 = x1      

if y1 > ymax:
   y1 = ymax
   if y1 < ymin:
      y1 = ymin    
else:
  y1 = y1  


xi = max([0]+[i for i in range(len(x)) if x1 >= x[i]])
yi = max([0]+[i for i in range(len(y)) if y1 >= y[i]])

z1 = z[yi, xi]

print z1

当然它并不优雅(我不是专家!),但它在所有情况下都运行良好,除了 x1, y1 = 600, 350 预期结果应该是z1 = z[yi, xi] = 1.04

希望这次我更清楚了!

如果你能帮助我,我将不胜感激! 非常感谢你们!

【问题讨论】:

不清楚你在问什么。为什么 1.07 是 z 的最小值? x,y 和 x1,y1 之间的关系是什么?它们与 z 的最小值有什么关系? 请添加一些相关代码? 我认为,如果您添加更多上下文并连接缺失的部分,可能会出现一些答案或提示。好奇你已经尝试过什么。 对不起,如果我不清楚。实际上,我有一个表格,其中 x 和 y 分别代表行的头部和列的头部。使用两个索引 (x1,y1) 我必须在表中输入并选择 z 中报告的最小值。为了更清楚,我将使用 x1 识别 i 和 i+1 行,使用 y1 识别 j 和 j+1 列,这意味着对于 z 中的值,我只需要提取它们之间的最小值。 请edit你的问题添加这个解释;谢谢。 【参考方案1】:
xindex = max([0]+[i for i in range(len(x)) if x1 >= x[i]])
yindex = max([0]+[i for i in range(len(y)) if y1 >= y[i]])
print z[yindex][xindex]

【讨论】:

虽然此代码可能会回答问题,但提供有关 why 和/或 如何 回答问题的额外上下文将显着改善其长期价值。请edit你的答案添加一些解释。【参考方案2】:
col = np.searchsorted(x, x1)
row = np.searchsorted(y, y1)
result = z[row - 1, col - 1]

请注意,您仍有一些工作要做来处理边缘情况,例如当x1 小于x 中的第一个值时。

【讨论】:

以上是关于使用2索引从数组中提取最小值[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用numpy选择排除某些索引的数组中最小值的索引

Python Pandas基于最小索引从数据帧中提取值

在Python中查找给定数组中最小值的索引

如何从整数中删除最小值并在不使用字符串的情况下返回其余数字[关闭]

在javascript中的数组中查找多个最小值的索引

尝试在数组中找到所有相等的最小值时出现真值错误,然后检索索引