簡體   English   中英

從文件中讀取矩陣為 int

[英]read matrix from file as int

我有一個文本文件,其中包含兩點之間距離的矩陣。 我想創建一個讀取矩陣但沒有''的 function

我的矩陣看起來像:

0.0 64.8 87.3 82.9 46.3 53.8
64.8 0.0 52.8 95.8 46.6 61.3
87.3 52.8 0.0 62.4 42.2 44.3
82.9 95.8 62.4 0.0 51.4 36.1
46.3 46.6 42.2 51.4 0.0 15.3
53.8 61.3 44.3 36.1 15.3 0.0

我的代碼看起來像:

def read_matrix(filename):
    matrix = []
    with open(filename, 'r') as f:
        matrix = [line.split() for line in f]
        return(matrix)    

但在這種情況下,它接收 output 作為字符串日期:

[['0.0', '64.8', '87.3', '82.9', '46.3', '53.8'], ['64.8', '0.0', '52.8', '95.8', '46.6', '61.3'], ['87.3', '52.8', '0.0', '62.4', '42.2', '44.3'], ['82.9', '95.8', '62.4', '0.0', '51.4', '36.1'], ['46.3', '46.6', '42.2', '51.4', '0.0', '15.3'], ['53.8', '61.3', '44.3', '36.1', '15.3', '0.0']]

所以通過閱讀其他類似的問題,我嘗試創建一個 function 讀取沒有''的日期 - >像這樣 [0.0, 64.8, 87.3, 82.9, 46.3, 53.8]

def read_matrix(filename):
    matrix = []
    with open(filename, 'r') as f:
        line = f.readline()
        words = line.split()
        for word in words:
            matrix.append(int(word))
    return(matrix) 

但是在每次嘗試中,我都會遇到相同的錯誤,例如:

invalid literal for int() with base 10: '0.0 64.8 87.3 82.9 46.3 53.8\n'

我也試試這個:

def read_matrix(filename):
    matrix = []
    with open(filename, 'r') as f:
        matrix = [[int(num) for num in line.split(',')] for line in f if line.strip() != "" ]
        return(matrix) 

但它也不起作用

是的,您擁有的數字不是整數。 只需將 'int' 替換為 'float' 即可

def read_matrix(filename):
    matrix = []
    with open(filename, 'r') as f:
        for line in f:
             matrix.append([float(word) for word in line.split()])
    return(matrix)

您的矩陣包含浮點數(十進制 s)所以代替int() function 使用float() function

matrix = []
with open("a.txt", 'r') as f:
    line = f.readline()
    words = line.split()
    for word in words:
        matrix.append(int(eval(word))

在您的文件 0.0 中,它不是有效的 integer,基數為 10。請訪問此鏈接以獲取更多信息。 Python 2.7 和 3.3.2,為什么 int('0.0') 不起作用?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM