【问题标题】:extract minimum value from array using 2 index [closed]使用2索引从数组中提取最小值[关闭]
【发布时间】: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你的问题添加这个解释;谢谢。

标签: python numpy


【解决方案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 中的第一个值时。

【讨论】:

    猜你喜欢
    • 2018-06-06
    • 2021-04-10
    • 2017-03-29
    • 2022-01-23
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    相关资源
    最近更新 更多