将matlab语句转换为python

将matlab语句转换为python,python,matlab,numpy,scipy,Python,Matlab,Numpy,Scipy,我应该在python中转换以下matlab语句: lam = find(abs(b)>tol,1,'first')-1; 提前感谢NumPy没有能力获取第一个匹配的 因此,我们需要找到所有匹配的,以替换find和numpy。abs将替换abs。因此,它将是- import numpy as np lam = np.where(np.abs(a)>tol)[0][0]-1 因此,我们用np.where(np.abs(a)>tol)[0]获得所有匹配索引,然后通过使用np.whe

我应该在python中转换以下matlab语句:

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

提前感谢

NumPy没有能力获取第一个匹配的

因此,我们需要找到所有匹配的,以替换
find
numpy。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]
索引到其第一个元素来获得第一个索引,最后从中减去
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.where(np.abs(a)>tol)[0]
计算所有匹配的索引,就像这样-

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

如果您提供一些“实际的”b,tol,并显示Matlab在没有第一个元素的情况下所做的工作,以及我是否希望使用“最后一个”而不是“第一个”?@Linux
np.where(np.abs(a)>tol)[0][1]
失败。啊,好的。非常感谢您的支持。