Python: конечная сумма с диапазоном переменных «TypeError: только скалярные целочисленные массивы могут быть преобразованы в скалярный индекс» - PullRequest
0 голосов
/ 28 июня 2018

Цель: сюжет V против MF

equation

import numpy as np

V = np.arange(3,46, step = 6)
A = 3

# 'n' is a sequence of odd numbers (i.e. 1,3,5,7, ...)
n = V/A

mm = (n+1)/2
MF = sum((np.power(-1, m)) * np.exp(m * m * (V/n)) for m in range(1,mm))

Я хочу, чтобы m сформировал последовательность 1, 2, 3, ... (n+1)/2.

У меня проблема с последней строкой range(1,mm), которая возвращает

TypeError: only integer scalar arrays can be converted to a scalar index

Мне кажется, проблема в том, что m не может быть переменной для разных чисел в одной и той же последовательности. Есть ли способ обойти это?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

import numpy as np

V = np.arange(3,46, step = 6)

A = 3

'n' является последовательностью нечетных чисел (т.е. 1,3,5,7, ...)

n = V/A

'm' - верхний предел суммирования; индексы суммирования - каждое целое число от 1 до m.

m = (n+1)/2

'y' представляет суммируемый элемент

y = np.power(-1, m) * np.exp((m**2)*A)

MF = np.add.accumulate(y)

print(n)

print(MF)

0 голосов
/ 28 июня 2018
Переменная

mm является массивом, содержащим последовательность 1, 2, 3 ..., поэтому часть range(1, mm) не имеет смысла, поскольку range ожидает, что ее аргументы будут целыми числами. Если вы хотите выполнить итерацию на mm, вы можете просто

MF = sum((np.power(-1, m)) * np.exp(m * m * (V/n)) for m in mm)

Примечание: Вероятно, это не то, что вам нужно, потому что V - это массив np.array, он делает результирующее выражение массивом.

Поскольку вы используете numpy, вам не нужно итерировать mm самостоятельно. Вы можете использовать mm напрямую:

MF = np.sum((-1) ** mm * np.exp(mm ** 2 * A))
>>> 2.4240441494100796e+83
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...