Сортировка матрицы

Задание:
Напишите функцию с использованием Numpy super_sort(rows, cols), в которую поступают размеры
матрицы. Вам необходимо:
1. заполнить матрицу А случайными целыми числами из диапазона [1..100]
2. сделать копию этой матрицы в матрицу B
3. упорядочить чётные столбцы матрицы B по возрастанию, а нечётные — по убыванию
Верните кортеж, состоящий из матриц А и B.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
import numpy as np def super_sort(rows, cols): A = np.random.randint(1, 101, (rows, cols)) B = A.copy() B[:, ::2] = -np.sort(-B[:, ::2], axis=0) B[:, 1::2] = np.sort(B[:, 1::2], axis=0) # C = A + B # return C return A, B if __name__ == '__main__': rows = int(input("Введите количество строк: ")) cols = int(input("Введите количество столбцов: ")) print(super_sort(rows, cols))
То, что закомментировано (строки 8 и 9) должно в итоге быть в программе, а пока что ниже лишь проверяю правильность работы (строка 10), но программа всё же выдаёт бред. Пытался решить всякими уже методами, но так и не додумался, нужна помощь.
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Сортировка выбором, Сортировка простыми вставками, Сортировка пузырьком, Сортировка слиянием, Быстрая сортировка Хоара
Имеется список товаров, хранящихся на базе. Каждая строка этого списка содержит: инвентарный номер.

Сортировка матрицы
при отправке в сириус говорит что программа выдаёт не верный ответ, хотя у меня всё.
Сортировка матрицы
Не получается закончить прогу. Сортировка вставками from numpy import* import random m=0 n=0.
Сортировка матрицы
Сортировать матрицу K сначала по возрастанию z-координаты, потом по возрастанию phi-координаты, как.
Регистрация: 19.05.2021
Сообщений: 9
Вот, что выдаёт программа сейчас
4764 / 2656 / 548
Регистрация: 07.11.2019
Сообщений: 4,373

Сообщение было отмечено dennyoff как решение
Решение
Вы молодец, хоть что-то самостоятельно сделали и корректно задали вопрос.
Я бы сделал так:
B = np.sort(B, axis=0) # сортируем всю матрицу по убыванию. B[:,::2]=B[::-1,::2] # четные столбцы (если нумерация столбцов с единицы?) оставляем, а нечетные переворачиваем.
Регистрация: 19.05.2021
Сообщений: 9
Попробовал ваш способ, программа всё равно работала неверно. Пришёл к тому, что можно сначала всю матрицу отсортировать по возрастанию, а потом нечётные по убыванию, но и это не сработало. Стало интересно: а сортировка то вообще выполняется? Результат ввёл в ступор. Видимо я что-то делаю не так
4764 / 2656 / 548
Регистрация: 07.11.2019
Сообщений: 4,373
пропущен -1 в 8 строке
B[:,1::2]=B[::-1,1::2]
Регистрация: 19.05.2021
Сообщений: 9
Я уже совсем запутался с этими столбцами, программа никак не хочет работать :с
Регистрация: 19.05.2021
Сообщений: 9
Упс, нечаянно поставил единичку в 7 строке, исправил, но программа в итоге всё равно неправильно пашет. Она чётные на уменьшение, а нечётные на возрастание столбцы ставит.
Регистрация: 19.05.2021
Сообщений: 9
АХахаххаха, извиняюсь, я настолько запутался, что смотрел при первом вашем решении на строки, а не на столбцы. Оно изначально было правильным, спасибо за помощь. Внимательность вышла из чата.
В итоге код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
import numpy as np def super_sort(rows, cols): A = np.random.randint(1, 101, (rows, cols)) B = A.copy() B = np.sort(B, axis=0) # сортируем всю матрицу по убыванию. B[:, ::2] = B[::-1, ::2] # return A, B - проверка на правильность работы программы C = A + B return C if __name__ == '__main__': rows = int(input("Введите количество строк: ")) cols = int(input("Введите количество столбцов: ")) print(super_sort(rows, cols))
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Сортировка строк матрицы
Напишите программу, которая переставляет строки матрицы так, чтобы значения в столбце K шли в.
Сортировка столбцов матрицы
Напишите программу, которая переставляет столбцы матрицы так, чтобы они шли в порядке убывания.
Сортировка столбцов матрицы
Как короче сделать? c= e= n,m = map(int,input().split()) a= matrix = for i in range(n)] for.

Сортировка строк матрицы
Напишите программу, которая переставляет строки матрицы так, чтобы значения в столбце K шли в.

Сортировка прямоугольной матрицы
Дана целочисленная матрица a размера (n×m), n,m≤10. В каждом столбце матрицы a переставить элементы.

Сортировка. Двоичный поиск. Матрицы
1. Напишите программу, которая считает среднее число шагов при двоичном поиске для массива из 32.
Или воспользуйтесь поиском по форуму:
Сортировка матрицы
Дана матрица n * m , нужно отсортировать и вывести колонками от самого маленького к самому большому, у меня не выходит сделать, смотреть ниже. Мой код:
n , m = map(int,input().split()) matrix = [list(map(int,input().split())) for i in range(n)] matrix_copy = copy.deepcopy(matrix) li = [] for i in range(n): for j in range(m): li.append(matrix[i][j]) li.sort() k = -1 for i in range(n): for j in range(m): k +=1 matrix_copy[i][j] = li[k] x = (list(zip(*matrix_copy))) for i in x: print(*i)
Вход: n — количество строк, m- количество колонок, потом вводим матрицу нужного размера. Как работает у меня:
input: 3 3 4 1 3 2 5 7 9 8 6 output: 1 4 7 2 5 8 3 6 9 input: 1 3 4 2 1 output: 1 2 4 input: 3 1 9 7 8 output: 7 8 9
Как должно быть:
input0: 3 3 4 1 3 2 5 7 9 8 6 output0: 1 4 7 2 5 8 3 6 9 input1: 1 3 4 2 1 output1: 1 2 4 input2: 3 1 9 7 8 output2: 7 8 9
Сортируйте матрицу по строкам и по столбцам, используя Python
В этой статье мы изучим программу на Python для сортировки матрицы по строкам и столбцам.
Предположим, мы взяли входную матрицу MxM. Теперь мы отсортируем данную входную матрицу по строкам и по столбцам, используя вложенный цикл for.
Алгоритм (шаги)
Ниже приведены алгоритмы/шаги, которые необходимо выполнить для выполнения желаемой задачи. −
-
Создайте функцию sortingMatrixByRow() для сортировки каждой строки матрицы, т. е. по строкам, принимая входную матрицу m (количество строк) в качестве аргументов.
Пример
Следующая программа возвращает отсортированную матрицу по строкам и столбцам для данной входной матрицы, используя вложенные циклы for:
# creating a function for sorting each row of matrix row-wise def sortingMatrixByRow(inputMatrix, m): # traversing till the length of rows of a matrix for p in range(m): # Sorting the current row for q in range(m-1): # checking whether the current element is greater than the next element if inputMatrix[p][q] >inputMatrix[p][q + 1]: # swapping the elements using a temporary variable # if the condition is true tempVariable = inputMatrix[p][q] inputMatrix[p][q] = inputMatrix[p][q + 1] inputMatrix[p][q + 1] = tempVariable # creating a function to get the transpose of a matrix # by accepting the input matrix, m values as arguments def transposeMatrix(inputMatrix, m): # traversing through the rows of a matrix for p in range(m): # Traversing from row +1 column to last column for q in range(p + 1, m): # Swapping the element at index (p,q) with (q,p) temp = inputMatrix[p][q] inputMatrix[p][q] = inputMatrix[q][p] inputMatrix[q][p] = temp # creating a function for sorting the matrix rows column-wise def sortMatrixRowandColumn(inputMatrix, m): # sorting the rows of an input matrix by # calling the above defined sortingMatrixByRow() function sortingMatrixByRow(inputMatrix, m) # getting the transpose of an input matrix by # calling the above defined transposeMatrix() function transposeMatrix(inputMatrix, m) # once again sorting the rows of an input matrix by # calling the above defined sortingMatrixByRow() function sortingMatrixByRow(inputMatrix, m) # once again getting the transpose of an input matrix(So we sorted the columns) transposeMatrix(inputMatrix, m) # creating a function to print the matrix def printingMatrix(inputMatrix, rows): # Traversing in the rows of the input matrix for i in range(rows): # Traversing in the columns corresponding to the current row # of the input matrix for j in range(rows): print(inputMatrix[i][j], end=" ") # Printing a new line to separate the rows print() # input matrix inputMatrix = [[2, 6, 5], [1, 9, 8], [7, 3, 10]] # input m value representing 3x3 matrix # (dimensions) m = 3 print("Input Matrix:") # printing the input matrix by calling the above # printingMatrix() function printingMatrix(inputMatrix, m) # calling the above defined sortMatrixRowandColumn() function # by passing the input matrix, m values to it to # sort the matrix row and column-wise sortMatrixRowandColumn(inputMatrix, m) # printing the input matrix after sorting row and column-wise # by calling the above printingMatrix() function print("Input Matrix after sorting row and column-wise:") printingMatrix(inputMatrix, m)
Выход
При выполнении вышеуказанная программа сгенерирует следующий вывод:
Input Matrix: 2 6 5 1 9 8 7 3 10 Input Matrix after sorting row and column-wise: 1 5 6 2 7 9 3 8 10
Временная сложность — O(n^2 log2n)
Вспомогательное пространство – O(1)
Заключение
В этой статье мы узнали, как использовать Python для сортировки заданной матрицы как по строкам, так и по столбцам. Кроме того, мы узнали, как транспонировать данную матрицу и как сортировать матрицу по строкам, используя вложенные циклы for (вместо использования встроенного метода sort()).
Как отсортировать массив NumPy по столбцу (с примерами)
Вы можете использовать следующие методы для сортировки строк массива NumPy по значениям столбцов:
Способ 1: сортировка по возрастанию значений столбца
x_sorted_asc = x[x[:, 1]. argsort ()]
Способ 2: сортировка по убыванию значений столбца
x_sorted_desc = x[x[:, 1]. argsort ()[::-1]]
В следующих примерах показано, как использовать каждый метод на практике.
Пример 1. Сортировка массива Numpy по возрастанию значений столбцов
Предположим, у нас есть следующий массив NumPy:
import numpy as np #create array x = np.array([14, 12, 8, 10, 5, 7, 11, 9, 2]). reshape (3,3) #view array print(x) [[14 12 8] [10 5 7] [11 9 2]]
Мы можем использовать следующий код для сортировки строк массива NumPy в порядке возрастания на основе значений во втором столбце:
#define new matrix with rows sorted in ascending order by values in second column x_sorted_asc = x[x[:, 1]. argsort ()] #view sorted matrix print(x_sorted_asc) [[10 5 7] [11 9 2] [14 12 8]]
Обратите внимание, что строки теперь отсортированы в порядке возрастания (от меньшего к большему) на основе значений во втором столбце.
Пример 2. Сортировка массива Numpy по убыванию значений столбцов
Предположим, у нас есть следующий массив NumPy:
import numpy as np #create array x = np.array([14, 12, 8, 10, 5, 7, 11, 9, 2]). reshape (3,3) #view array print(x) [[14 12 8] [10 5 7] [11 9 2]]
Мы можем использовать следующий код для сортировки строк массива NumPy в порядке убывания на основе значений во втором столбце:
#define new matrix with rows sorted in descending order by values in second column x_sorted_desc = x[x[:, 1]. argsort ()[::-1]] #view sorted matrix print(x_sorted_desc) [[14 12 8] [11 9 2] [10 5 7]]
Обратите внимание, что строки теперь отсортированы в порядке убывания (от большего к меньшему) на основе значений во втором столбце.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в Python: