Как переписать идентификаторы узлов, хранящиеся в файле .mtx

#python #python-3.x #numpy

#python #python-3.x #numpy

Вопрос:

У меня есть .mtx файл, который выглядит следующим образом:

 0 435   1
0 544   1
1 344   1
2 410   1
2 471   1
 

Эта матрица имеет форму (1000, 1000) .
Как вы можете видеть, идентификаторы узлов начинаются с 0 . Я хочу изменить это, чтобы начать с 1 вместо 0 .
Другими словами, мне нужно добавить 1 ко всем числам в первом и втором столбцах, которые представляют идентификаторы узлов.

Итак, я преобразовал .mtx файл в .txt файл и попытался добавить 1 в каждый первый и второй столбцы.

и просто добавляется 1 в каждую строку, как показано ниже

 import numpy as np 

data_path = "my_data_path"
data = np.loadtxt(data_path, delimiter=' ', dtype='int')
for i in data:
    print(data[i] 1)
 

и результат был

 [  1 436   2]
[  1 545   2]
[  2 345   2]
[  3 411   2]
[  3 472   2]
 

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

Кто-нибудь может мне помочь в этом?

Или, если есть какой-либо способ выполнить мою цель проще, пожалуйста, скажите мне. Заранее благодарю вас.

Ответ №1:

Почему бы вам не увеличить только первый столбец?

 data[:, 0]  = 1
 

Возможно, вы захотите взглянуть на индексацию в NumPy.

Кроме того, я не думаю, что цикл в вашем коде когда-либо работал:

 for i in data:
    print(data[i] 1)
 

Вы индексируете значения из массива, что обычно неверно и, безусловно, неверно в данном случае:

Ошибка IndexError: индекс 435 выходит за пределы оси 0 с размером 5

Вы можете исправить это, чтобы распечатать всю матрицу:

 print(data   1)
 

Предоставление:

 [[  1 436   2]
 [  1 545   2]
 [  2 345   2]
 [  3 411   2]
 [  3 472   2]]