我最近从使用open blas编译的numpy转换为使用mkl编译的numpy。在纯数值运算中,矩阵乘法的速度明显加快。但是,当我运行一些代码时,我一直在使用这些代码乘以包含sympy变量的矩阵,现在出现错误
'当前不支持对象数组'
有人知道为什么mkl是这种情况而不是open blas是这种情况吗?
1.17.0发行说明
Support of object arrays in matmul
It is now possible to use matmul (or the @ operator) with object arrays. For instance, it is now possible to do:
from fractions import Fraction
a = np.array([[Fraction(1, 2), Fraction(1, 3)], [Fraction(1, 3), Fraction(1, 2)]])
b = a @ a
您是否正在使用@
(matmul
或dot
)?包含numpy
对象的sympy
数组将是对象dtype
。对象数组上的数学取决于将操作委派给对象自己的方法。快速编译库无法执行此操作,该库仅适用于c
和float
之类的double
类型。
作为一般规则,您不应该尝试混合numpy
和sympy
。数学是命中注定的,而且永远不会很快。使用sympy's
自己的Matrix
模块,或使用lambdify
sympy
表达式进行数字运算。
什么是mkl
版本?您可能需要与该编译器的创建者一起探讨。