我有一张表,其中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
。
我希望这次我更清楚!
如果你能帮助我,我将感激你! 非常感谢你们!
答案 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]