2017-04-07 117 views
-5

我應該轉換下面MATLAB的語句在Python:轉換MATLAB語句到Python

lam = find(abs(b)>tol,1,'first')-1; 

在此先感謝

+0

這將是有用的,如果你提供一些'實際'b,tol,並顯示什麼Matlab –

回答

1

NumPy的沒有拿到第一個匹配,not yet anyway的能力。

所以,我們需要用np.where取代所有匹配的取代findnumpy.abs將替代abs。因此,這將是 -

import numpy as np 

lam = np.where(np.abs(a)>tol)[0][0]-1 

因此,我們得到的所有匹配指數與np.where(np.abs(a)>tol)[0],然後通過索引到其與np.where(np.abs(a)>tol)[0][0]第一個元素,最後減去它1獲得的第一個索引,就像我們在MATLAB 。

採樣運行 -

在MATLAB:

>> b = [-4,6,-7,-2,8]; 
>> tol = 6; 
>> find(abs(b)>tol,1,'first')-1 
ans = 
    2 

在NumPy的:

In [23]: a = np.array([-4,6,-7,-2,8]) 

In [24]: tol = 6 

In [25]: np.where(np.abs(a)>tol)[0][0]-1 
Out[25]: 1 # 1 lesser than MATLAB vesion because of 0-based indexing 

出於性能考慮,我建議使用np.argmax給我們的第一個匹配的一個指數,而不是使用np.where(np.abs(a)>tol)[0]來計算所有匹配的索引,像這樣 -

In [40]: np.argmax(np.abs(a)>tol)-1 
Out[40]: 1 
+0

'argmax'失敗,如果沒有第一個元素 – Eric

+0

如果我想要「最後」,而不是「第一」? – Linux

+0

@Linux'np.where(np.abs(a)> tol)[0] [ - 1]'。 – Divakar