首页 > 解决方案 > 带有 mkl 的 numpy 不支持对象数组?

问题描述

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

'当前不支持对象数组'

有没有人知道为什么 mkl 是这种情况而不是 open blas 的情况?

标签: numpysympyintel-mklopenblas

解决方案


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

你在使用@matmuldot)吗?包含对象的numpy数组sympy将是 object dtype。对象数组的数学运算取决于将操作委托给对象自己的方法。它不能由快速编译的库执行,这些库仅适用于 和等c类型。floatdouble

作为一般规则,您不应该尝试混合numpysympy. 数学是命中注定的,而且永远不会很快。使用sympy's自己的Matrix模块,或数值工作lambdifysympy表达式。

什么mkl版本?您可能必须与该汇编的创建者一起探索这一点。


推荐阅读