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如何工作?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)