2015-02-05 64 views
0

我是一名大学本科生,在一位教授的研究学分中参与研究,所以这对我来说几乎是一个独立的项目。将matlab脚本转换为python

我正在将一个matlab脚本转换为python(3.4)脚本,以方便在我的项目的其余部分使用。所“查找”功能,采用在脚本,像这样:

keyindx = find(summags>=cumthresh,1) 

Keyindx将包含第一值的位置内summag上述cumthresh

所以,作为一个例子:

summags = [ 1 4 8 16 19] 
cumthresh = 5 

然后keyindx将返回索引2,其元素对应于8.

我的问题是,我想在python中找到类似的函数(我也使用numpy并且可以使用任何我需要的库),它们将以同样的方式工作。我的意思是,来自C语言的背景我知道如何获得我需要的所有东西,但我认为有更好的方法可以做到这一点,然后编写一些C风格的代码。

那么,关于在哪里查看python文档和关于寻找一般有用的函数的任何提示?

+0

另外,如果您对我低估了,那么请您提供一个理由吗?我不知道我的问题怎么样不好... – Liquidmetal 2015-02-05 20:39:01

+0

不是downvoter,但我怀疑原因是你没有显示你已经尝试过什么,也没有给出一个示例行为的小例子数组。什么发现做什么,你有什么尝试等 – 2015-02-05 20:41:33

+0

@AndyHayden我认为这是合理的,期待任何人回答标签“matlab”的问题将知道什么'find'功能! – 2015-02-05 20:49:26

回答

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)) 
+0

谢谢您的建议!仍然习惯于pythonic风格,对它来说非常新颖。 :) – Liquidmetal 2015-02-05 20:51:42

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]) 
+0

真棒,谢谢! – Liquidmetal 2015-02-05 20:51:15