Python. Матрицы и двухмерные массивы
Всем привет, с праздниками. Пишу с такой проблемой: не до конца понимаю работу циклов с матрицами. Нашёл туториал на паскале по схожему заданию, пробую вот как-то перевести на Python, но пока не очень получается, вот что сделал и вроде логически понимаю задачу, но не могу реализовать на коде. Пока такое есть. Сама задача: -Есть матрица NxN и число К. Столбец с минимальным по модулю элементом в k-той строке переставить с k-тым столбцом. Мой код:
import random
n = int(input("Розряд: "))
matrix = [[random.randrange(-10,10) for y in range(n)] for x in range(n)]
print("Начальная матрица: ",matrix)
k = int(input("Число К:" ))
tmp = []
maxcol = 0
max = 1
#номер макс. по модулю элемента k строки и его номер (столбец)
for i in range(n):
if max < abs(matrix[k, i]):
max = abs(matrix[k, i])
maxcol = 1
#переставляем столбцы
for i in range(n):
tmp = matrix[i, k]
matrix[i, k] = matr[i, maxcol]
matrix[i, maxcol] = tmp
#вывод матрицы
for i in range(n):
for j in range(n):
print...
Ответы (2 шт):
import random
n = int(input("Розряд: "))
matrix = [[random.randrange(-10,10) for y in range(n)] for x in range(n)]
print("Начальная матрица: ",matrix)
k = int(input("Число К:" ))
abs_min=11
k_j=-1
for j in range(n):
if abs_min>abs(matrix[k][j]):
abs_min=abs(matrix[k][j])
k_j=j
for i in range(n):
matrix[i][k],matrix[i][k_j]=matrix[i][k_j], matrix[i][k]
print("Результирующая матрица: ",matrix)
Результат:
Розряд: 5
Начальная матрица: [[-5, -7, -5, 1, -1],
[-4, 9, -2, -1, -7],
[2, -8, -4, -2, -3],
[-1, 9, 1, -8, 1],
[-7, -1, 9, 2, -2]]
Число К:1
Результирующая матрица: [[-5, 1, -5, -7, -1],
[-4, -1, -2, 9, -7],
[2, -2, -4, -8, -3],
[-1, -8, 1, 9, 1],
[-7, 2, 9, -1, -2]]
Минимальный по абсолютному значению элемент в строке с индексом 1 - "-1" находится в столбце с индексом 3, который в итоге переставляется со столбцом с индексом 1. Как просили.
Я точно не понял, что вам нужно, но заметил пару ошибок в коде:
Обращаться к элементу матрицы нужно вот так:
matrix[строка][столбец]Если вам нужно найти минимальный элемент, то переменной
maxнужно присвоить максимальное значение + 1. Я так понимаю максимальное значение элемента в матрице у вас будет 10.Значит присваиваем
max = 11В первом цикле вы проверяете
max < abs(matrix[k, i]), то есть если элемент матрицы больше, то вы делаете какие либо действия, а вам нужно найти минимальный элемент.По этому пишем:
if abs(matrix[k][i]) < max:Ну а сам цикл просто проходится по элементом
k-ой строки, тут я думаю все понятно.Далее у вас изначально
tmpэто пустой массив, я думаю разtmpиспользуется для перестановки, то это должно быть число, то естьtmp = 0.И во втором цикле у вас опечатка не
matrаmatrixдолжно быть.Ну и вот пример вывода матрицы:
for i in range(n): for j in range(n): print(matrix[i][j], end = ' ') print()
Полный код:
import random
n = int(input("Разряд: "))
matrix = [[random.randrange(-10,10) for y in range(n)] for x in range(n)]
print("Начальная матрица: ",matrix)
k = int(input("Число К:" ))
tmp = 0
maxcol = 0
max = 11
#номер макс. по модулю элемента k строки и его номер (столбец)
for i in range(n):
if abs(matrix[k][i]) < max:
max = abs(matrix[k][i])
maxcol = i
#переставляем столбец
for i in range(n):
tmp = matrix[i][k]
matrix[i][k] = matrix[i][maxcol]
matrix[i][maxcol] = tmp
#вывод матрицы
for i in range(n):
for j in range(n):
print(matrix[i][j], end = ' ')
print()