Python 使用2索引从数组中提取最小值
我有一个表,其中x和y分别表示行的头和列的头。使用两个索引(x1,y1),我必须在表中输入并选择z中报告的最小值。为了更清楚,使用x1,我将标识I和I+1行,使用y1标识j和j+1列,这意味着z中有四个值,我只需要提取它们之间的最小值 这是表格:Python 使用2索引从数组中提取最小值,python,numpy,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.,
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]])
为了
我想在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
x=np.数组([100,200,300,400,500,600.]))
y=np.数组([20,300,450,500,550.]))
z=np.数组([[1,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=100600
ymin,ymax=20550
x1,y1=600350
如果x1>xmax:
x1=xmax
如果x1ymax:
y1=ymax
如果y1=x[i])
yi=最大值([0]+[i代表范围内的i(len(y)),如果y1>=y[i]])
z1=z[yi,xi]
打印z1
当然它并不优雅(我不是专家!),但它在所有情况下都非常有效,除了x1,y1=600,350,其中预期结果应该是z1=z[yi,xi]=1.04
我希望这次我更清楚了
如果你能帮助我,我将非常感激你!
非常感谢大家
col = np.searchsorted(x, x1)
row = np.searchsorted(y, y1)
result = z[row - 1, col - 1]
请注意,处理边缘情况仍有一些工作要做,例如当
x1
小于x
中的第一个值时,不清楚您在问什么。为什么1.07是z的最小值?x,y和x1,y1之间的关系是什么?它们与z的最小值有什么关系?请添加一些相关代码?我认为如果您添加更多上下文并连接缺少的部分,可能会出现一些答案或提示。我很好奇你已经试过了。如果我不清楚,我很抱歉。实际上,我有一个表,其中x和y分别表示行的头和列的头。使用两个索引(x1,y1),我必须在表中输入并选择z中报告的最小值。为了更清楚,使用x1,我将标识I和I+1行,使用y1标识j和j+1列,这意味着对于z中的值,我只需要提取它们之间的最小值。请您的问题添加此解释;谢谢。虽然这段代码可能会回答这个问题,但提供关于为什么和/或如何回答这个问题的附加上下文将显著提高其长期价值。请在您的回答中添加一些解释。
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]
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]