使用mkl的numpy上不支持对象数组?

使用mkl的numpy上不支持对象数组?,numpy,sympy,intel-mkl,openblas,Numpy,Sympy,Intel Mkl,Openblas,我最近从使用OpenBLAS编译的numpy切换到使用mkl编译的numpy。在纯数值运算中,矩阵乘法的速度明显加快。然而,当我运行一些代码时,我一直在使用它乘以包含sympy变量的矩阵,现在我得到了错误 '当前不支持对象数组' 有人知道为什么mkl会出现这种情况而开放blas不会出现这种情况吗?1.17.0的发行说明 Support of object arrays in matmul It is now possible to use matmul (or the @ operator) w

我最近从使用OpenBLAS编译的numpy切换到使用mkl编译的numpy。在纯数值运算中,矩阵乘法的速度明显加快。然而,当我运行一些代码时,我一直在使用它乘以包含sympy变量的矩阵,现在我得到了错误

'当前不支持对象数组'


有人知道为什么mkl会出现这种情况而开放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
)吗?包含
sympy
对象的
numpy
数组将是object
dtype
。对象数组的数学依赖于将操作委托给对象自己的方法。快速编译库无法执行此操作,它只能处理
c
类型,例如
float
double

一般来说,您不应该尝试将
numpy
sympy
混合使用。数学是偶然的,从不快速。使用
symphy的
own
Matrix
模块,或
lambdify
表达式进行数值计算


mkl的
版本是什么?您可能需要与该汇编的创建者一起探讨这一点。

我使用了@。我想我比较了使用sympy matrix模块和numpy@的计时,发现在我最初编写代码时,这种特殊用途的计时速度更快。是我用的。我猜numpy版本太旧了。使用MKL的矩阵乘法只适用于单精度(np.float32,np.complex64)或双精度(np.float64,np.complex128)的浮点数组。MKL不支持所有其他数据类型,但Numpy中也有C/Cython实现,它们也可以与其他一些数据类型一起使用。(但速度要慢得多)