我是大学的本科生,在教授的研究学分中,所以这对我来说几乎是一个独立的项目。
我正在将matlab脚本转换为python(3.4)脚本,以便在项目的其余部分中使用。脚本中使用了'find'函数,如下所示:
keyindx = find(summags>=cumthresh,1)
Keyindx将包含cumthresh
上方的summary中第一个值的位置所以,举个例子:
summags = [ 1 4 8 16 19]
cumthresh = 5
然后keyindx将以索引2返回,其元素对应于8.
我的问题是,我试图在python中找到一个类似的函数(我也使用numpy并且可以使用我需要的任何库),它们将以相同的方式工作。我的意思是,来自C的背景我知道如何获得我需要的一切,但我认为有一个更好的方法来做这个然后只是写一些C风格的代码。
那么,关于在python文档中查看哪些内容以及一般查找有用函数的任何提示都会被提示?
答案 0 :(得分:2)
快速搜索引导我进入argwhere
函数,您可以将其与[0]
结合使用,以获得满足条件的第一个索引。例如,
>> import numpy as np
>> x = np.array(range(1,10))
>> np.argwhere(x > 5)[0]
array([5])
这与说
不完全相同find(x > 5, 1)
在MATLAB中,因为如果没有值满足你的条件,Python代码将抛出IndexError
(而MATLAB返回一个空数组)。但是,您可以捕获并适当地处理它,例如
try:
ind = np.argwhere(x > 5)[0]
except IndexError:
ind = np.array([1])
答案 1 :(得分:1)
np.nonzero(x)
给出非零索引的元组。然后,该值可用于索引匹配大小的任何数组。
In [1262]: x=np.arange(6).reshape(2,3)
In [1263]: ind=np.nonzero(x>3)
In [1264]: x[ind]
Out[1264]: array([4, 5])
In [1265]: ind
Out[1265]: (array([1, 1], dtype=int32), array([1, 2], dtype=int32))