我最近从用openblas编译的numpy切换到用mkl编译的numpy。在纯数值运算中,矩阵乘法的运算速度明显加快。然而,当我运行一些代码时,我一直在使用它来乘以包含sympy变量的矩阵,我现在得到了错误
"当前不支持对象数组">
有人知道为什么mkl而不是openblas会出现这种情况吗?
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
(?包含sympy
对象的numpy
数组将是对象dtype
。对象数组的数学运算取决于将操作委派给对象自己的方法。它不能由快速编译的库执行,这些库只适用于c
类型,如float
和double
。
一般来说,您不应该尝试混合使用numpy
和sympy
。数学是偶然的,从不快速。使用sympy's
自己的Matrix
模块,或使用lambdify
的sympy
表达式进行数值运算。
mkl
的版本是什么?您可能需要与该汇编的创建者一起探索这一点。