【问题标题】:matrix multiplying between files in pythonpython中文件之间的矩阵相乘
【发布时间】:2017-09-30 04:03:19
【问题描述】:
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]]

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

【问题讨论】:

  • 如果你想做矩阵乘法 A 到 B,你会得到一个错误,形状不匹配。 A中的列数应与B中的行数相同

标签: python file matrix


【解决方案1】:

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

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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    相关资源
    最近更新 更多