как суммировать элементы, сгенерированные с помощью цикла в python

#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. Хорошо, теперь выводим несколько сумм.