2014-01-04 30 views
-1

Как преобразовать код matlab в код python?преобразование кода matlab в код python

function b = ismonotone(v, tol) 
    if (nargin < 2) 
    tol = 0; 
    end 

    b = 0; 
    dv = diff(v); 
    if (min(dv) >= -tol) b = bitor(b, 1); end 
    if (max(dv) <= tol) b = bitor(b, 2); end 
end 

Я знаю python, но не как Matlab. Я хотел бы узнать на этом примере, как работает функция или сколько возвращаемых значений для функции, и т. Д.

+0

Я не понял тип возврата и последние 2 строки. таким образом я застрял. и (nargis <2) означает args [2]? – sam

ответ

1

Я не знаю, каково намеренное использование вашей функции, но вот ее перевод в Python.

def diff(v): 
    result = [] 
    for i in range(1, len(v)): 
     result.append(v[i] - v[i-1]) 
    return result 

def ismonotone(v, tol=0): 
    b = 0 
    dv = diff(v) 
    if min(dv) >= -tol: 
     b = b | 1 
    if max(dv) <= tol: 
     b = b | 2 
    return b 

Заметные точки:

  • В Matlab, diff является встроенной функцией, которая вычисляет разность между соседними элементами массива. Простое переопределение (хотя это может быть не самый эффективный способ сделать это).

  • Поскольку Matlab имеет ужасную поддержку для работы с вариационными функциями, вам нужно futz с nargin (что равно количеству аргументов, переданных функции) и мусор, подобный этому, чтобы заставить вещи работать время от времени. Итак, код Matlab в основном говорит: «Если у меня меньше двух аргументов, установите tol=0». В Python мы можем просто использовать значения по умолчанию для аргументов (tol=0).

  • При определении функции в Matlab, вы пишете:
    function return_value = function_name(arguments)
    Независимо от значения переменной return_value (в данном случае, b) является всякий раз, когда управление покидает функцию (то есть всякий раз, когда либо по окончании срока справка end или заявление return), то есть то, что возвращается. Оператор return в Matlab не принимает «аргумент» так же, как это делает оператор Python return. Конечно, Python, как и большинство разумных языков, использует явные операторы return.

  • bitor(a, b) в matlab эквивалентно a | b в Python.

+0

но наргин принимает входные параметры, нужно ли нам давать аргументы? – sam

+0

@sam Я не уверен, что понимаю ваш вопрос, но если вы спрашиваете, почему код Matlab не является, например, 'nargin (что-то)', потому что вы иногда можете вызывать функции Matlab, даже не используя круглые скобки (я тоже не понимаю эту часть Matlab). Обратите внимание, что на странице docs для 'nargin' есть два параметра для синтаксиса:' nargin' и 'nargin (fx)'. Вы только хотели бы использовать последнюю форму, если, например, вы были в функции 'ismonotone', и вы хотели узнать о количестве аргументов для _some other_ function' foo', и в этом случае вы должны написать 'nargin ('foo')'. – senshin

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