使用2索引从数组中提取最小值

时间:2016-06-09 12:05:25

标签: python numpy

我有一张表,其中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

感谢您的评论,特别是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

我希望这次我更清楚!

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

2 个答案:

答案 0 :(得分:0)

col = np.searchsorted(x, x1)
row = np.searchsorted(y, y1)
result = z[row - 1, col - 1]

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

答案 1 :(得分:0)

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]