矩阵在python中的文件之间相乘

时间:2017-09-30 04:03:19

标签: python file matrix

import linecache

fileA = open('matrixA.txt', 'r' )

line2 = linecache.getline('matrixA.txt', 2)
line3 = linecache.getline('matrixA.txt', 3)
line4 = linecache.getline('matrixA.txt', 4)

two = line2.split()
list2 = list(map(int, two))

three = line3.split()
list3 = list(map(int,three))

four = line4.split()
list4 = list(map(int, four))

listA = [list2]+[list3]+[list4]
print (listA)

fileB = open('matrixB.txt', 'r')

Bline2 = linecache.getline('matrixB.txt', 2)
Bline3 = linecache.getline('matrixB.txt', 3)
Bline4 = linecache.getline('matrixB.txt', 4)

btwo = Bline2.split()
blist2 = list(map(int, btwo))

bthree = Bline3.split()
blist3 = list(map(int,bthree))

bfour = Bline4.split()
blist4 = list(map(int, bfour))

listB = [blist2] + [blist3] + [blist4]
print (listB)

q = listA[0] #
h = listB[0] #This part dosn't work 
aq = q*h     #
print(aq)    #

//for i in range(listA):

所以我的代码到目前为止我的2个文件A打印为:

  

[[1,2,3,4],[5,6,7,8],[9,10,11,12]]

文件B打印为:

  

[[3,3,9],[7,4,8],[4,20,30]]

我如何让这两个矩阵相乘,我知道你需要位置,但我不知道如何进行循环。

1 个答案:

答案 0 :(得分:2)

我假设您已正确加载* .txt数据(您开始从第二行读取数据),然后将其乘以简单的数据,将其转换为numpy数组并使用np.dot。< / p>

import numpy as np
A = np.asarray(listA)
B = np.asarray(listB)
res = np.dot(B,A)
print(res)

或者你可以通过索引列表而不用numpy来做到这一点:

res = [[0] * len(listA[0]) for _ in range(len(listB))]
for i in range(len(listB)):
    for j in range(len(listA[0])):
        for k in range(len(listA)):
            res[i][j] += listB[i][k]*listA[k][j]
print(res)

要确保您的矩阵可以倍增,请先检查尺寸:

if len(listA)==len(listB[0]):
    res = [[0] * len(listA[0]) for _ in range(len(listB))]
    for i in range(len(listB)):
        for j in range(len(listA[0])):
            for k in range(len(listA)):
                res[i][j] += listB[i][k]*listA[k][j]
    print(res)
else:
    print("ERROR! Size Mismatch")