我有一个非常慢的代码运行问题。我尝试计算一个非常大的二进制矩阵(170544 X 22)与其转置的点积。 起初,我试过了这段代码:
import numpy as np
start = time.time()
import warnings
warnings.filterwarnings("ignore", message='genfromtxt', category=UserWarning)
np.set_printoptions(threshold=np.nan)
fin = open('E:/myscripts/Abin.txt', 'rb') # input file (170544X22 binary matrix)
fin1 = open('E:/myscripts/AbinT.txt', 'rb') # input file (22X170544 binary matrix the transpose of Abin)
fout = open('E:/myscripts/RPartial.txt', 'w+b') # output file
FW = np.genfromtxt(fin,delimiter=',', dtype=int)
WF = np.genfromtxt(fin1,delimiter=',', dtype=int)
r = np.dot(FW,WF) #r calculation
np.savetxt(fout, r, fmt='%i' ,delimiter=',', newline='\r\n')
fin.close()
fin1.close()
fout.close()
但是出现了内存错误。然后我使用行方法更改了r的计算方式:
for row in FW:
a=FW[row,:]
r = np.dot(a,WF)
np.savetxt(fout, r, fmt='%i' ,delimiter=',', newline='\r\n')
目前代码可以运行,但速度非常慢,在90分钟后只计算了8000行。硬件配置为I7处理器、12GB内存,运行64位Windows操作系统。如何加速代码?
数据格式如下:
([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0,0],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,0,0,0])
并且结果应该是这样的。
([15,14,14,14,14],
[14,15,14,14,14],
[14,14,15,14,14],
[14,14,14,15,14],
[14,14,14,14,15]) .