python – BLAS sgemmdgemm如何工作?

python – BLAS sgemmdgemm如何工作?,第1张

概述我试图在 python中使用ctypes在BLAS中使用函数sgemm.试图解决C = A x B以下代码工作得很好: no_trans = c_char("n")m = c_int(number_of_rows_of_A)n = c_int(number_of_columns_of_B)k = c_int(number_of_columns_of_A)one = c_float(1.0) 我试图在 python中使用ctypes在BLAS中使用函数sgemm.试图解决C = A x B以下代码工作得很好:

no_trans = c_char("n")m = c_int(number_of_rows_of_A)n = c_int(number_of_columns_of_B)k = c_int(number_of_columns_of_A)one = c_float(1.0)zero = c_float(0.0)blaslib.sgemm_(byref(no_trans),byref(no_trans),byref(m),byref(n),byref(k),byref(one),A,B,byref(zero),C,byref(m))

现在我想解决这个等式:C = A’x A其中A’是A的转置,下面的代码运行时没有异常,但返回的结果是错误的:

trans = c_char("t")no_trans = c_char("n")m = c_int(number_of_rows_of_A)n = c_int(number_of_columns_of_A)one = c_float(1.0)zero = c_float(0.0)blaslib.sgemm_(byref(trans),byref(n))

对于测试我插入了一个矩阵A = [1 2; 3 4].正确的结果是C = [10 14;但是sgemm例程吐出C = [5 11; 11 25].

据我所知,矩阵A不必由我调换,因为算法会处理它.在第二种情况下我的参数传递出了什么问题?

任何帮助,链接,文章,建议表示赞赏!

解决方法 Blas通常使用列主矩阵(如Fortran),因此A = [1 2; 3 4]意思

|1 3|   A = |   |    |2 4|

结果是正确的(假设你的Python库也是这样).见这read-me

总结

以上是内存溢出为你收集整理的python – BLAS sgemm / dgemm如何工作?全部内容,希望文章能够帮你解决python – BLAS sgemm / dgemm如何工作?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1192520.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存