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

+0

Не нисходящий, но я подозреваю, что причина в том, что вы не показываете, что вы пробовали, или не даете небольшой примерный массив, который демонстрирует поведение. Что делать, что вы пробовали и т. Д. –

+0

@ AndyHayden Я думаю, что разумно ожидать, что любой, кто отвечает на вопрос с тегом «matlab», будет знать, что делает функция 'find'! –

ответ

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

Спасибо за предложение! Все еще привыкший к питоническому стилю, очень новый для него. :) – Liquidmetal

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

Awesome, спасибо !!! – Liquidmetal

Смежные вопросы