将.mm文件中的矩阵加载到Python中

时间:2019-02-02 16:49:28

标签: python

使用numpy的

我试图加载/运行从test.mm文件的矩阵在python。文件内部的矩阵例如写为

的2x2矩阵
    1 1 10
    1 2 11
    2 1 20
    2 2 30

我做了很多研究,但找不到合适的答案。

1 个答案:

答案 0 :(得分:0)

解决方案

该代码可能不是有史以来最好的代码,但是可以在您提供的示例中使用。 同样在python中,索引从0开始,您有索引1,2,假设3x3矩阵。我为您的用例进行了修改

import numpy as np

def mm2matrix(file_name,start_line = 1):
    with open(file_name,'r') as f:
        data = f.read().split('\n')
    number = [i.split(' ') for i in data]
    number = number[start_line:]
    all_numbers = []
    for i in range(len(number)):
        all_numbers += [float(sub) for sub in number[i] if len(sub)!=0]


    mmfile = np.array(all_numbers).reshape(len(all_numbers)/3,3,)
    x_index = mmfile[:,0].astype(np.int)-1
    y_index = mmfile[:,1].astype(np.int)-1 # you say 2x2 matrix, but you have indexes 1,2
    matrix = np.zeros(shape = [np.amax(x_index)+1,np.amax(y_index)+1])
    values = mmfile[:,2]
    matrix[x_index,y_index]=values

    return matrix

matrix = mm2matrix('test.mm')
>>> matrix
array([[10., 11., 22.],
       [20., 45., 85.]])

test.mm -我又增加了一列(2x3或3x2)来测试目的

Matrix
1 1 10
1 2 11
1 3 22
2 1 20
2 2 30
2 2 45
2 3 85

如果数组具有切换的轴,则只需对其进行转置

matrix = matrix.T