Как реализовать разреженную матрицу в python

#python #python-3.x #matrix #sparse-matrix

Вопрос:

Слышал, я принимаю пользовательский ввод для матрицы

 print("Enter values for matrix ")
a = []
m = int(input("Number of rows, m = "))
n = int(input("Number of columns, n = "))

for i in range(m):
    l = []
    for j in range(n):
        l.append(int(input("Entry in row: {} column: {}n".format(i 1,j 1))))
    a.append(l)

print("Matrix - =",a) 
 

если пользователь
вводит значения для матрицы
Количество строк, m = 2
Количество столбцов, n = 3
Запись в строке: 1 столбец: 1
1
Запись в строке: 1 столбец: 2
2
Запись в строке: 1 столбец: 3
3
Запись в строке: 2 столбец: 1
4
Запись в строке: 2 столбец: 2
5
Запись в строке: 2 столбец: 3
6
Матрица — = [[1, 2, 3], [4, 5, 6]]

Я пытаюсь разрежить матрицу, чтобы напечатать разреженную матрицу: 001 012 023 104 115 126

Комментарии:

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

2. Весь смысл разреженной матрицы заключается в том, что вы не перебираете (или храните, или иным образом обрабатываете) все элементы, только ненулевые

Ответ №1:

Вам нужно также добавить значения строк и столбцов в переменную «l», а затем сбросить ее во втором цикле. Добавление » l » должно произойти во втором цикле

 print("Enter values for matrix ")
a = []
m = int(input("Number of rows, m = "))
n = int(input("Number of columns, n = "))

for i in range(m):
    for j in range(n):
        l = []
        l.append(i)
        l.append(j)
        l.append(int(input("Entry in row: {} column: {}n".format(i 1,j 1))))
        a.append(l)

print("Matrix - =",a) 
 

выход

 Matrix - = [[0, 0, 1], [0, 1, 2], [0, 2, 3], [1, 0, 4], [1, 1, 5], [1, 2, 6]]
 

Комментарии:

1. Это не разреженная матрица и не обрабатывается как разреженная матрица?

2. Я пытался сопоставить выходные данные, требуемые OP. Я понимаю, что это не разреженная матрица, но моя попытка заключалась только в том, чтобы получить ожидаемый результат.

Ответ №2:

Чтобы использовать разреженную матрицу в python, просто установите библиотеку scipy. Ниже приведен пример того, как использовать его с numpy.

 # Load libraries
import numpy as np

from scipy import sparse

# Create a matrix
matrix = np.array([[0,0],[0,1],[3,0]])

# Create a compressed sparse row (CSR) matrix
matrix_sparse = sparse.csr_matrix(matrix)

# View sparse matrix 
print(matrix_sparse)
 

Ответ №3:

Вот лучший подход к получению значений матрицы.

 rows, cols = map(int, input("Enter the number of rows and columns").split())
matrix = []

for i in range(rows):
    matrix.append(list(map(int, input("Enter the row values").split())))

for i in matrix:
    print(*i, sep="", end=" ")
 

Комментарии:

1. Это не разреженная матрица и не обрабатывается как разреженная матрица?