将matlab脚本转换为python

时间:2015-02-05 20:27:49

标签: matlab numpy python-3.4

我是大学的本科生,在教授的研究学分中,所以这对我来说几乎是一个独立的项目。

我正在将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文档中查看哪些内容以及一般查找有用函数的任何提示都会被提示?

2 个答案:

答案 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))