#python #numpy #for-loop
#python #numpy #for-цикл
Вопрос:
эксперты я хочу получить сумму элементов, сгенерированных с помощью цикла for(x) в python.Я написал программу для этого, но я не получаю сумму значений x. пожалуйста, помогите.
import numpy as np
f=np.arange(1,2,1)
for i in f:
#print(i)
for m in np.arange(1,6,1):
x=((4.6)*(m*2)*(5)**2)*(i)/62
print(x)
#print(np.sum(x))
Комментарии:
1. Похоже, вы распечатывали промежуточные значения при написании этого кода, чтобы лучше понять, что происходит. Молодец.
Ответ №1:
Как я полагаю, вы хотите вычислить сумму всех сгенерированных значений.
Первый, «классический» и не очень эффективный метод заключается в создании списка, добавлении каждого созданного элемента в этот список, а затем вычислении суммы этого списка:
f = np.arange(1,2)
tbl = []
for i in f:
for m in np.arange(1,6):
x = ((4.6)*(m*2)*(5)**2)*(i)/62
print(f'{i}, {m}: {x:.4f}')
tbl.append(x)
print(sum(tbl))
Результат:
1, 1: 3.7097
1, 2: 7.4194
1, 3: 11.1290
1, 4: 14.8387
1, 5: 18.5484
55.64516129032258
Но более эффективным и простым в использовании вариантом является использование np.fromfunction
способ сгенерировать весь массив Numpy за один раз, а затем вычислить его
сумму:
arr = np.fromfunction(lambda i, m: 4.6 * m * 2 * 5 ** 2 * i / 62, (2, 6))
print(arr)
print(arr.sum())
Обратите внимание, что я удалил ненужные круглые скобки из вашего кода.
На самом деле ваша функция может быть еще более упрощена до:
lambda i, m: i * m * 9.2 * 5 ** 2 / 62
На этот раз результат:
[[ 0. 0. 0. 0. 0. 0. ]
[ 0. 3.70967742 7.41935484 11.12903226 14.83870968 18.5483871 ]]
55.64516129032258
Редактировать
Из одного из других ответов я вижу, что вас может заинтересовать последовательность совокупных сумм ваших значений.
После создания arr вы можете сгенерировать такую последовательность с помощью:
np.cumsum(arr[1:,1:])
даже для более чем одной строки (значения i). Проверьте это, например, на форму
(3, 6)
.
Ответ №2:
Объявите и инициализируйте переменную вне цикла и добавьте x к этой переменной.
import numpy as np
f=np.arange(1,5,1)
for i in f:
sum = 0
for m in np.arange(1,6,1):
x=((4.6)*(m*2)*(5)**2)*(i)/62
sum = x
print(i, sum)
Вывод:
1 55.64516129032258
2 111.29032258064515
3 166.93548387096774
4 222.5806451612903
Комментарии:
1. кстати, не используйте
sum
в качестве имени переменной. Это встроенный.2. sum не является ключевым словом в python. Следующий код вернет False, дайте мне знать, если я что-то упустил #### импортировать ключевое слово print(‘sum’ в ключевом слове. kwlist)
3. @glkshu Пожалуйста, скажите, каков ваш исключенный результат в обоих случаях np.arange(1,2,1) и np.arange(1,5,1)
4. sum не является ключевым словом в python. Это встроенный, такой же, как enumerate, list или zip.
5. ОК. понял вашу точку зрения. Обновленный код. Пожалуйста, проверьте, работает ли это
Ответ №3:
Просто добавьте свой x в список и используйте sum() .
import numpy as np
f=np.arange(1,2,1)
for i in f:
items = []
for m in np.arange(1,6,1):
x=((4.6)*(m*2)*(5)**2)*(i)/62
items.append(x)
print(sum(items))
Комментарии:
1. Ну, я не знаю, какие ответы вы ищете. Каковы ожидаемые значения для ваших двух сценариев?
2. Извините, я все еще не знаю, какие ответы вы ищете. Возможно, вы могли бы обновить свой вопрос некоторыми примерами входных и выходных данных.
3. Хорошо, теперь выводим несколько сумм.