2017-08-15 21 views
1

我剛開始學習Numpy(和Scipy)。我寫了一個程序來計算f(x)函數的繪圖點。 (F(X)不能被明確地,因爲我有數值求解每個點的等式給出。)我把值的2D陣列:Numpy - 查找數據點的最大點和值

[[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

可以使用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)作爲(X,F (x))與f(x)的最大值配對。請注意,argmax僅返回第一次出現的最大值。如果存在的f最大值出現多次的可能性,你想的x所有的值,那麼你可以做

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

出於興趣:爲什麼數據[1,:]比data [1]更受歡迎? – Neinstein

+1

在這種情況下,它沒有區別;這只是我的習慣。我經常將(x,y)數據存儲在轉置格式中,然後我必須寫'data [:,1]'來獲得'y'值。 – user8153

1

1 - 我是這樣認爲的

2 - argmax返回的索引最大值,以便您可以檢索該值及其對應的x值。

idx = result[1].argmax() 
xm = result[0,idx] 
fxm = result[1,idx] 
相關問題