You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab调用Python时触发Intel MKL错误的问题求助

Matlab调用Python时np.random.multivariate_normal触发Intel MKL错误的解决思路

问题背景

  • 运行环境:Ubuntu 22.04.2 LTS、Matlab R2022b、Python 3.9.16、NumPy 1.23.5、Intel MKL 2023.1
  • 异常表现:Matlab调用Python代码执行points = np.random.multivariate_normal(means, correlation, nSamples)时,抛出Intel MKL错误:
Intel MKL ERROR: Parameter 12 was incorrect on entry to DGBBRDM.

Intel MKL ERROR: Parameter 10 was incorrect on entry to DGESDD.
init_gesdd failed init

程序未终止但返回全零数组;同一conda环境下直接运行Python代码可正常生成样本,更新conda包无效。对比环境:Ubuntu 20.04.6 LTS、Matlab R2023a可正常运行。

可行解决方向

  • 版本兼容性调整
    • 降级NumPy版本:将NumPy从1.23.5降级到1.22.x或1.21.x系列,规避高版本NumPy的MKL接口与Matlab R2022b自带MKL的冲突。执行命令:
      conda install numpy=1.22.4
      
    • 统一MKL版本:强制Python使用Matlab自带的MKL库,启动Matlab前执行环境变量设置(路径需匹配实际Matlab安装位置):
      export LD_PRELOAD=/usr/local/MATLAB/R2022b/bin/glnxa64/libmkl_rt.so
      
  • Matlab环境配置优化
    • 禁用MKL多线程冲突:在Matlab启动脚本中添加export MKL_NUM_THREADS=1,避免多线程资源竞争;同时确认Matlab的pyenv配置指向目标conda环境,而非系统Python。
  • 替代实现绕过MKL问题
    • 手动实现多元正态分布生成,不依赖MKL加速:
      import numpy as np
      
      def custom_multivariate_normal(mean, cov, n_samples):
          # 对协方差矩阵做Cholesky分解
          L = np.linalg.cholesky(cov)
          # 生成标准正态样本并转换
          return mean + L @ np.random.normal(size=(cov.shape[0], n_samples)).T
      
      在Matlab中调用该自定义函数替代np.random.multivariate_normal。

内容的提问来源于stack exchange,提问作者Eleuterio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:30:26