Function 在numpy/scipy中查找函数matlab

Function 在numpy/scipy中查找函数matlab,function,matlab,numpy,find,scipy,Function,Matlab,Numpy,Find,Scipy,对于numpy/scipy,是否有来自matlab的find(A>9,1)的等效函数。我知道numpy中有非零函数,但我需要的是第一个索引,这样我就可以在另一个提取列中使用第一个索引 例:A=[123964310] find(A>9,1)将返回matlab中的索引4numpy中的find等价物是非零,但它不支持第二个参数。 但是你可以这样做来获得你想要的行为 B = nonzero(A >= 9)[0] 但是,如果您所寻找的只是找到满足条件的第一个元素,那么最好使用max 例如,在ma

对于numpy/scipy,是否有来自matlab的
find(A>9,1)
的等效函数。我知道numpy中有
非零
函数,但我需要的是第一个索引,这样我就可以在另一个提取列中使用第一个索引

例:
A=[123964310]

find(A>9,1)
将返回matlab中的索引
4
numpy中的
find
等价物是
非零
,但它不支持第二个参数。 但是你可以这样做来获得你想要的行为

B = nonzero(A >= 9)[0] 
但是,如果您所寻找的只是找到满足条件的第一个元素,那么最好使用
max

例如,在matlab中,
find(A>=9,1)
将与
[~,idx]=max(A>=9)
相同。numpy中的等效函数如下所示

idx = (A >= 9).argmax()
matlab的
find(X,K)
大致相当于python中的
numpy.nonzero(X)[0][:K]
@如果
K==1
,Pavan的argmax方法可能是一个不错的选择,但除非您事先知道a>=9中会有一个值,否则您可能需要执行以下操作:

idx = (A >= 9).argmax()
if (idx == 0) and (A[0] < 9):
    # No value in A is >= 9
    ...
idx=(A>=9).argmax()
如果(idx==0)和(A[0]<9):
#A中没有大于等于9的值
...

我确信这些都是很好的答案,但我没能利用它们。然而,我发现另一条线索部分回答了这个问题:

John发布了以下代码,解释了find的第一个参数,在您的例子中是A>9---find(A>9,1)--但不是第二个参数

我修改了约翰的密码,我相信这可以解释第二个论点“1”

这将返回threshold=3。我的理解是Python的索引从0开始。。。这相当于Matlab4。您可以通过更改括号中的数字(即[1]、[2]等)而不是[0]来更改正在调用的索引的值

约翰的原始代码:

def indices(a, func):
    return [i for (i, val) in enumerate(a) if func(val)]

a = [1, 2, 3, 1, 2, 3, 1, 2, 3]

inds = indices(a, lambda x: x > 2)
返回>>>inds[2,5,8]

考虑在Python中使用以替换MATLAB的
find
函数。比如说,

import numpy as np
A = [1, 2, 3, 9, 6, 4, 3, 10]
np.argwhere(np.asarray(A)>=9)[0][0] # Return first index
返回3

import numpy
A = numpy.array([1, 2, 3, 9, 6, 4, 3, 10])
index = numpy.where(A >= 9)

您可以先将列表转换为数据数组,然后使用函数numpy.where()获取所需的索引。

您的意思是
=
?因为
将返回8。实际上,numpy数组是基于零的,因此
9
位于
3
位置,
10
位于
7
位置。
import numpy
A = numpy.array([1, 2, 3, 9, 6, 4, 3, 10])
index = numpy.where(A >= 9)