В матрице имеются столбцы, в которых второй элемент больше первого. Найти сумму элементов этих столбцов
Вот код:
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 шт):
Поскольку это явно учебное задание, ответ будет в форме наводящих вопросов.
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не нужен, вы его написали, чтобы избежать ошибки, которую я указывал выше, но он от неё не поможет.
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)