Numpy - 查找数据点的最大点和值

时间:2017-08-15 19:16:47

标签: python numpy scipy

我刚开始学习Numpy(和Scipy)。我写了一个程序来计算f(x)函数的绘图点。 (f(x)不能明确给出,因为我必须在数值上求解每个点的方程。)我把这些值放在一个二维数组中:

[[x1,    x2,    x3,    ...],
 [f(x1), f(x2), f(x3), ...]]

我的目标是找到f(x)函数的最大值,并获得它的位置xm和它的值f(xm)。当然我可以很容易地做到这一点,但这似乎是NumPy肯定有一个简单的功能。我发现的唯一的东西是numpy.amax,但它只返回每个轴的最大值。 (例如numpy.amax([[1,3,2],[5,7,9]],轴= 1)返回[3,9]。)。

我有两个问题:

  1. 我是否采用了良好的方法来存储数据点,或者NumPy / SciPy中是否有特定的对象来执行此操作?
  2. 是否有内置的NumPy / SciPy函数来查找数据集的最大值?

    这是相关代码的一部分:

    def get_max(args):
        ti_0 = sp.pi / 2.0 + 1E-10
        ti_max = sp.pi - 1E-10
        iters = 10000
    
        step = (ti_max - ti_0) / iters
        ti = ti_0
        result = np.empty((2, iters), float_)   #the dataset, aim is to find the point where ret_energy is maximal
        for i in range(0, iters):
            tret = find_return_time(x, ti)
            ret_energy = ekin(tret, ti)
            ret_time = tret / sp.pi
            result[i, 0] = ret_time
            result[i, 1] = ret_energy
            ti += step
    
        emax = None
        #emax = find_maximal_return_energy(result) #-> ???
        return emax
    

2 个答案:

答案 0 :(得分:2)

您可以使用argmax功能:

data = np.array([[2, 4, 6, 8],[1, 3, 9, 7]])
x = data[0,:]
f = data[1,:]
i = np.argmax(f)
print x[i], f[i]

打印(6,9)为具有最大值f(x)的(x,f(x))对。请注意,argmax仅返回第一次出现的最大值。如果f的最大值有可能出现多次,并且您希望所有值都为x,那么您可以

maxvalue = np.max(f)
print x[f == maxvalue], maxvalue

答案 1 :(得分:1)

1 - 我想是的

2 - argmax返回最大值的索引,以便您可以检索该值及其相应的x值。

idx = result[1].argmax()
xm = result[0,idx]
fxm = result[1,idx]