我想讀取一個帶有矩陣值的文本檔案。假設您有一個如下所示的 .txt 檔案:
0 0 4.0
0 1 5.2
0 2 2.1
1 0 2.1
1 1 2.9
1 2 3.1
這里,第一列給出了 x 軸上矩陣的索引,第二列給出了 y 軸的索引。第三列是矩陣中該位置的值。當值丟失時,值只是零。
我很清楚這樣一個事實,像 .mtx 格式這樣的資料格式存在,但我想單獨從這個 txt 檔案創建一個 scipy 稀疏矩陣或 numpy 陣列,而不是將其調整為 .mtx 檔案格式。是否有一個 Python 函式可以為我執行此操作,而我缺少它?
uj5u.com熱心網友回復:
從a在您的示例中按第一列(主要)和第二列(次要)排序的陣列 ( )開始,您可以reshape:
# a = np.loadtxt('filename')
x = len(np.unique(a[:,0]))
y = len(np.unique(a[:,1]))
a[:,2].reshape(x,y).T
輸出:
array([[4. , 2.1],
[5.2, 2.9],
[2.1, 3.1]])
uj5u.com熱心網友回復:
import numpy
with open('filename.txt','r') as f:
lines = f.readlines()
f.close()
data = [i.split(' ') for i in lines]
z = list(zip(*data))
row_indices = list(map(int,z[0]))
column_indices = list(map(int,z[1]))
values = list(map(float,z[2]))
m = max(row_indices) 1
n = max(column_indices) 1
p = max([m,n])
A = numpy.zeros((p,p))
A[row_indices,column_indices]=values
print(A)
如果您想要一個方陣,其中第 1 列的最大值為行數,第 2 列的最大值為大小,則可以洗掉p = max([m,n])并替換A = numpy.zeros((p,p))為A = numpy.zeros((m,n))。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/340427.html
