Как вычесть каждое целое число в массиве из предыдущего целого числа и найти результат суммирования

#python #arrays #numpy

#python #массивы #numpy

Вопрос:

У меня есть массив numpy, который имеет размер (122,) и состоит из целых чисел

Я хочу использовать следующую формулу:

введите описание изображения здесь

Я пытался делать

 value=sum((I[:-1]-I[1:])**2))
  

Эта строка сама по себе не создает ошибки, но всякий раз, когда я пытаюсь использовать это значение в формуле большего размера, она выдает недопустимую синтаксическую ошибку.

Я хочу использовать это значение для подключения к более крупной формуле

введите описание изображения здесь

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

 calc = np.linalg.norm((RR_intervals[:-1])-(RR_intervals[1:]))                                                                     

p=(n-1)*sqrt(2)
o=(1/p)*calc
t=o**2
  

Если я попытаюсь объединить это с первым термином, я получу недопустимую синтаксическую ошибку

Полное сообщение интерпретатора: runfile(‘/home/user_1/p01.py ‘, wdir=’/home/user_1’) Обратная трассировка (последний последний вызов):

Файл «/home/user_1/.local/lib/python3.6/site-packages/IPython/core/interactiveshell.py «, строка 3291, в run_code exec(code_obj, self.user_global_ns, self.user_ns)

Файл «», строка 1, в runfile(‘/home/user_1/p01.py ‘, wdir=’/home/user_1’)

Файл «/usr/lib/python3/dist-packages/spyder/utils/site/sitecustomize.py «, строка 705, в runfile execfile(имя файла, пространство имен)

Файл «/usr/lib/python3/dist-packages/spyder/utils/site/sitecustomize.py «, строка 102, в execfile exec(compile(f.read(), filename, ‘exec’), пространство имен)

Файл «/home/user_1/p01.py «, строка 91 дисперсия = (sqrt(m-t)) ^ Ошибка синтаксиса: недопустимый синтаксис

Комментарии:

1. Ваш код мне кажется прекрасным. Здесь нет синтаксических ошибок

2. Как именно formula используется тогда? (Например, вы понимаете, что это не функция, а значение, верно?)

3. Пожалуйста, предоставьте код увеличенной формулы и ошибку, которую вы получаете

4. Ошибка, которую я получаю, является недопустимым синтаксисом

5. Я разделил код для большей формулы на меньшие разделы, я включу код

Ответ №1:

Вы можете сделать это с помощью list :

 a = list(numpy_array)
sum([(i-j)**2 for i,j in zip(a,a[1:])])
  

Ответ №2:

Это должно сделать это:

 result = sum((ar[i] - ar[i   1])**2 for i in range(len(ar) - 1))
  

Ответ №3:

Использование numpy:

 (((a-np.roll(a,1))**2)[1:]).sum()
  

Примечание: [1:] Необходимо, потому что roll повторно вставляет элемент в начало массива.

Комментарии:

1. Это альтернатива его собственному решению, которое отлично работает, IMO

2. Разве не все альтернативы его решению? Он сам сказал, что код работает, не уточняя, какую ошибку он получает.

3. it gives an invalid syntax error по какой-то причине. Тем не менее, я не вижу синтаксических ошибок вообще, это кажется вполне допустимым

4. «но всякий раз, когда я пытаюсь использовать formula в своем коде …» Я начинаю верить, что на самом деле ему нужно не значение, а функция, которая вычисляет указанное значение для подключения к большему вычислению. Заданный в комментарии к вопросу, давайте посмотрим..