#python #sparse-matrix
#python #разреженная матрица
Вопрос:
У меня разреженная матрица как A_n. тип A_n — «scipy.sparse.csc.csc_matrix».
например, A_n — это:
(16, 0) 1.0
(71, 1) 1.0
(74, 3) 1.0
(72, 12) 1.0
. .
. .
(32, 17) 1.0
(64, 17) 1.0
(53, 19) 1.0
(73, 20) 1.0
(52, 21) 1.0
(52, 22) 1.0
(44, 26) 1.0
(53, 26) 1.0
(87, 26) 1.0
Я хочу записать все A_n в текстовый файл на python следующим образом:
16 0 1.0
71 1 1.0
74 3 1.0
.
.
или
(16, 0) 1.0
(71, 1) 1.0
(74, 3) 1.0
.
.
Я был бы очень признателен, если бы вы направили меня
Комментарии:
1. Вам нужно получить к ней доступ впоследствии или вам нужно только записать ее в файл? Почему вы сохраняете ее в файл?
2. Что-то не так с двойным циклом for и последующей печатью строки в стандартный вывод, если установлен конкретный
i,j
элемент?3. Я просто хочу записать ее в текстовый файл в той же форме, что и выше. затем я хочу открыть этот файл в Excel.
4. Нет, не существует. Каков его код?
Ответ №1:
Вы могли бы просто преобразовать объект spare matrix в строку, используя str(sparse_matrix)
, а затем записать его в файл после изменения атрибута maxprint на spare_matrix.shape[0] .
sparse_matrix.maxprint = sparse_matrix.shape[0]
with open("spare_matrix.txt","w") as file:
file.write(str(sparse_matrix))
file.close()
Комментарии:
1. Этот код правильный, но не записывает все элементы матрицы в файл. этот код игнорирует некоторые строки и заменяет их на «: :».Например, между двумя строками (72, 12) и (32, 17) в A_n был написан знак «: :».
2. Я обновил приведенный выше код и изменил атрибут maxprint перед преобразованием в строку, это должно решить проблему. Мне пришлось прочитать исходный код scipy для этого xD. Надеюсь, это поможет вам
3. Это все еще неполно. Он печатает только записи с точностью до количества строк. Она должна
sparse_matrix.maxprint = sparse_matrix.count_nonzero()
включать все ненулевые данные.
Ответ №2:
Здесь ‘i’ будет проходить по строкам вашей матрицы A_n, а ‘j’ будет проходить только по ненулевым столбцам для i-й строки A_n.
file = open('sparse_matrix.txt','w')
for i in range(A_n.shape[0]):
for j in A_n[i].nonzero()[1]:
file.write(str(i) ' ' str(j) ' ' str(A_n[i,j]) 'n')
file.close()