首页 > 解决方案 > 提取numpy数组并将每个数组加在一起

问题描述

我使用此代码从“巨大”两个文件中提取数据:

import numpy as np
import re
n=6567 #size of array

#reading 1st file
with open("stiff.txt") as file: 
    data = file.read()
kmat = [[0 for _ in range(n)] for _ in range(n)]
for x, y, value in re.findall(r'\[\s*(\d+),\s*(\d+)\s*\]: ([0-9e+.]+)', data):
    if value :
        kmat[int(x)-1][int(y)-1] = value  # indexes are 0-based
k=np.array(kmat)
print (k)

#reading 2nd file
with open("mass.txt") as file:   
    data = file.read()

mmat = [[0 for _ in range(n)] for _ in range(n)]
for x, y, value in re.findall(r'\[\s*(\d+),\s*(\d+)\s*\]: ([0-9e+.]+)', data):
    if value :
        mmat[int(x)-1][int(y)-1] = value  # indexes are 0-based
m=np.array(mmat)
print (m)

然后当我试图乘以k@m它给我下一个错误:

"matmul did not contain a loop with signature matching types"

原始文件数据样本如下:

[[   1,   1]: 3.890e-004 [   1,   7]: 9.732e-005 [   1,  13]: 9.735e-005 [   1,  67]: 9.729e-005 [   1,  73]: 2.440e-005 [   1,  79]: 2.440e-005 
[   2,   2]: 3.890e-004 [   2,   8]: 9.732e-005 [   2,  14]: 9.735e-005 [   2,  68]: 9.729e-005 [   2,  74]: 2.440e-005 [   2,  80]: 2.440e-005 
[   3,   3]: 3.890e-004 [   3,   9]: 9.732e-005 [   3,  15]: 9.735e-005 [   3,  69]: 9.729e-005 [   3,  75]: 2.440e-005 [   3,  81]: 2.440e-005 
[   4,   4]: 1.167e-009 [   4,  10]: 2.920e-010 [   4,  16]: 2.921e-010 [   4,  70]: 2.919e-010 [   4,  76]: 7.319e-011 [   4,  82]: 7.319e-011 
[   5,   5]: 1.167e-009 [   5,  11]: 2.920e-010 [   5,  17]: 2.921e-010 [   5,  71]: 2.919e-010 [   5,  77]: 7.319e-011 [   5,  83]: 7.319e-011 
[   6,   6]: 1.167e-019 [   6,  12]: 2.920e-020 [   6,  18]: 2.921e-020 [   6,  72]: 2.919e-020 [   6,  78]: 7.319e-021 [   6,  84]: 7.319e-021 ...................]

假设它是一个稀疏矩阵。

标签: pythonnumpy

解决方案


推荐阅读