В матрице имеются столбцы, в которых второй элемент больше первого. Найти сумму элементов этих столбцов

Вот код:

import numpy as np

#Создаем рандомную матрицу. Размер и диапазон чисел задает пользователь
print('Enter the size of matrix:')
a = int(input('a='))
b = int(input('b='))
print('Enter the range numbers:')
startnum = int(input('start num='))
endnum = int(input('end num='))
array = np.random.randint(startnum, endnum, size=(a, b))
print('This is your matrix:\n', array)

#Сравнение второго элемента с первым в столбце
sumel=0
for i in range(array.shape(0)):
    for j in range(array.shape(1)):
        if array[i] < array[i+1]:
            sumel = array.sum(axis=0)

print(sumel)

#Как правильно составить алгоритм сравнения с последующим суммированием элементов столбца? [![неработающая функция/алгоритм][1]][1]

исправил на это, но у меня индексы вылетают за пределы размера:

    sumel=0
for i in range(a):
    temp = array[:, i] # Получаю столбец: использую срез, где первый элемент (не указываю), второй - номер столбца
    if temp[i] < temp[i+1]:
        sumel = temp.sum(axis=0)
    if i == a-1:
        break


print(sumel)

[![ошибка][2]][2]

Проконсультируйте пожалуйста [1]: https://i.stack.imgur.com/bTQoI.png [2]: https://i.stack.imgur.com/7bSg1.png


Ответы (2 шт):

Автор решения: CrazyElf

Поскольку это явно учебное задание, ответ будет в форме наводящих вопросов.

sumel=0
for i in range(array.shape(0)):
    for j in range(array.shape(1)):
        if array[i] < array[i+1]:
            sumel = array.sum(axis=0)

Вот вы делаете цикл по переменной j, а потом её никак не используете. Задумайтесь - а нужен ли вам вообще цикл в цикле. А также подумайте - какой же вам нужен цикл (один цикл, не два), по какому измерению (строки, столбцы?)

if array[i] < array[i+1]:

Что вы здесь сравниваете - строки матрицы i и i+1 между собой? У вас в задании совсем не это написано.

sumel = array.sum(axis=0)

Вы суммируете всю матрицу, тут сравнения из условия никак не участвуют, индексы никакие не участвуют. Подумайте - что именно вы должны суммировать и при каком условии.

Посмотрим обновлённый код

sumel=0
for i in range(a):
    temp = array[:, i] # Получаю столбец: использую срез, где первый элемент (не указываю), второй - номер столбца
    if temp[i] < temp[i+1]:
        sumel = temp.sum(axis=0)
    if i == a-1:
        break

Ошибки:

  • Насколько я понял, число столбцов у вас в b, а не в a, так что перебор в for должен быть другой.
  • Зачем в проверке "второй элемент больше первого" участвует номер столбца, если вы уже получили срез по столбцу, и при этом не участвуют индексы первого и второго элемента?
  • Последний if не нужен, вы его написали, чтобы избежать ошибки, которую я указывал выше, но он от неё не поможет.
→ Ссылка
Автор решения: user448732
    import numpy as np

# Создаем рандомную матрицу. Размер и диапазон чисел задает пользователь
print('Enter the size of matrix:')
a = int(input('a='))
b = int(input('b='))
print('Enter the range numbers:')
startnum = int(input('start num='))
endnum = int(input('end num='))
array = np.random.randint(startnum, endnum, size=(a, b))
print('This is your matrix:\n', array)

# Проходимся по столбцам матрицы для поиска столбцов,
# в которых следующий элемент больше предыдущего
sumel = 0
for i in range(b):  # Проход по столбцам
    temp = array[:, i]  # Получаю столбец: использую срез, где первый элемент (не указываю), второй - номер столбца
    for j in range(len(temp) - 1):  # Проход по элементам столбца(нашего среза)
        if temp[j] < temp[j + 1]:  # Проверка: следующий элемент больше предыдущего?
            sumel = sum(temp, sumel)  # Суммирую элементы столбца, начиная со значения, записанного в sumel

# Вывод пользователю сумму всех столбцов, которые прошли проверку
print('Sum of element = ', sumel)
→ Ссылка