【问题标题】:Numpy - Find maximum point and value of data pointsNumpy - 查找数据点的最大值和值
【发布时间】:2017-08-16 03:33:05
【问题描述】:

我刚开始学习 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]], axis=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
    

【问题讨论】:

    标签: python numpy scipy


    【解决方案1】:

    你可以使用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
    

    【讨论】:

    • 出于兴趣:为什么data[1,:]data[1] 更受欢迎?
    • 在这种情况下它没有任何区别;这只是我的一个习惯。我经常以转置格式存储(x,y)数据,然后我必须写data[:,1]才能得到y的值。
    【解决方案2】:

    1 - 我想是的

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-23
      • 1970-01-01
      • 2018-01-08
      • 2023-02-04
      • 2021-09-15
      • 2013-09-28
      • 1970-01-01
      相关资源
      最近更新 更多