Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用2索引从数组中提取最小值_Python_Numpy - Fatal编程技术网

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

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和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]])
为了

我想在
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]