2015-02-05 107 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