2016-04-21 3 views
2

Я новичок в Python, но я пытаюсь учиться. Я пытаюсь воссоздать цикл Matlab for в Python. Цикл Matlab for выглядит следующим образом:Для ошибки цикла?

for i = 2:(L-1) 
    Acceleration_RMT5_x(i-1) = (RMT5(i+1,1)-2*RMT5(i,1)+RMT5(i 
    1,1))/(1/FrameRate)^2; 
end 

тип данных float64, и это 288x1 вектор. Мой Python до сих пор:

for i in RMT5x: 

    Acceleration_RMT5x = RMT5x[i+1] -2*RMT5x[i] +RMT5x[i-1]/(1/250)^2) 

Это дает мне «недопустимый синтаксис».

Что мне нужно для устранения этой ошибки?

+1

сила '' ** в Python. '^' - это xor. –

+1

У вас есть несогласованные круглые скобки. Подсчитайте их: один открытый '(' и два закрытых ')'. –

+0

Не ваш вопрос, купите этот цикл, если вы используете numpy: 'Acceleration_RMT5x = RMT5x [2:] -2 * RMT5x [1: -1] + RMT5x [: - 2]/(1/250) ** 2 '. Никакой цикл не нужен. – TheBlackCat

ответ

2

Чтобы поднять что-то к власти в Python вам нужно ** не ^

Также вы перекручивание через значений из RMT5x, но вы пытаетесь использовать значение (i) в качестве индекса. Вместо этого вы хотите пройти через индекс.

Acceleration_RMT5x = list() 

for i in range(1, len(RMT5x)-1): 
    Acceleration_RMT5x.append(RMT5x[i+1] -2*RMT5x[i] +RMT5x[i-1]/(1./250)**2) 
+0

У вас все еще есть ошибка скобок OP, и ваш цикл завершится неудачно, потому что i + 1 попытается прочитать индекс, который не существует. (Я также не уверен, что OP не хочет модифицировать существующий ndarray на месте, но это трудно понять.) – DSM

+0

Лучше использовать 'enumerate (RMT5x)' в этой ситуации. – TheBlackCat

+0

@ TheBlackCat Кроме этого не потому, что пользователю необходимо получить доступ к предыдущим и последующим записям 'RMT5x'. Использование 'enumerate' не позволит этого. – Suever

0

Я хотел бы использовать список понимание:

import numpy as np 
Acceleration_RMT5x = [np.power((RMT5(i+1,1)-2*RMT5(i,1)+RMT5(i-1,1))/(1/FrameRate), 2)] 
Смежные вопросы