纯粹出于我对代码和计算机的知识和理解,我试图创建一个具有多个矩阵函数的数组/矩阵类,然后我将在我需要一个矩阵或数组类的任何项目中使用它。最重要的是,我想使用这个矩阵/数组类制作一个神经网络库,因此要求它尽可能快。
我所要求的最快的函数是两个矩阵的矩阵乘积计算,但是,对于较大的矩阵,我几乎没有成功地使这一计算更快。
我目前计算点积的方法是:
注意,这段代码是python的,但是,如果python不是最佳语言,我可以使用任何其他语言。
a = [[1, 2, 3], [4, 5, 6]]
b = [[1], [2], [3]]
def dot(a, b):
c = [[0 for j in range(len(b[i]))] for i in range(len(a))]
for i in range(len(c)):
for j in range(len(c[i])):
t = 0
for k in range(len(b)):
t += a[i][k] * b[k][j]
c[i][j] = t
return c
print(dot(a, b))
# [[14], [32]]我已经研究过Intel MKL (我有一个英特尔核心i7)和其他BLAS实现,比如OpenBLAS,但是我无法获得任何有效的结果,而且谷歌搜索也无法使它们工作,所以我的问题是,计算两个矩阵的点积的最快方法是什么?(目前CPU和内存的使用对我来说并不重要,但是,更有效地使用CPU和内存会更好)
PS:
我试图使用不使用外部库(例如,python中的numpy)来完成所有这些工作。
*更新*
我用的是mac
更新2*
谢谢大家的帮助,然而,我不知道如何实现这些计算点积的方法,因为我的数学技能还不够先进,不足以理解其中的任何一个(我还没有开始我的GCSE),尽管我会记住这些想法,并将进一步尝试这些想法。
再次感谢大家的帮助。
发布于 2019-10-29 23:58:04
如果可能的话,您可以使用库达来使用GPU进行非常快速的计算。
发布于 2019-10-30 08:02:49
sqr,我认为你可以简化更多的乘法。Python远远不是最优的,因为它的速度慢,我会在C++中做这样的事情,甚至如果需要极快的速度(就像SIMD指令所使用的那样),我甚至会与asm结合。您仍然可以使用C++在python中创建的库(链接为DLL、obj、.)
然而,如果您需要快速神经网络,然后使用专用HW。也有神经网络处理集成电路。
https://stackoverflow.com/questions/58616134
复制相似问题