Matlab 調用 Python 腳本

Matlab 調用 Python 腳本

最近嘗試在 Matlab 環境中調用 Python 腳本,這裏總結下碰到的幾個問題。html

1. Python 模塊加載

在 Matlab 函數中,想要將 Python 文件做爲模塊加載,須要首先修改 Python 環境變量路徑python

P = py.sys.path;
if count(P,modpath) == 0
	insert(P,int32(0),modpath);
end

修改好路徑後,直接使用 import 命令加載 Python 模塊會產生錯誤,需採用如下命令ide

py.importlib.import_module('analytical_subcritical'); % 加載 python 模塊 analytical_subcritical

2. Python 函數調用

在調用 Python 模塊中函數時,需將 Matlab 環境中變量轉換爲 Python 類型的變量傳入函數中,部分類型變量能夠直接轉換,可參考 Matlab 官網—將數據傳遞給 Python函數

在 Matlab 中經常使用的向量和矩陣轉換爲 1$\times$N 大小能夠直接做爲 array.array('d') 類型 Python 變量傳入,所以可將輸入數據大小轉換後直接傳入 Python 函數中進行計算。spa

3. Python 數據處理

在得到 Python 函數返回結果後,需將數據從新轉換爲 Matlab 類型變量。不一樣類型變量轉換能夠參考官網—處理從 Python 返回的數據code

可是這些類型僅爲 Python 中部份內建變量類型,對於經常使用的 Numpy 庫返回的 ndarray 類型變量須要進一步轉化htm

value = 

  Python ndarray with properties:

           T: [1×1 py.numpy.ndarray]
        base: [1×1 py.NoneType]
      ctypes: [1×1 py.numpy.core._internal._ctypes]
        data: [1×24 py.buffer]
       dtype: [1×1 py.numpy.dtype]
       flags: [1×1 py.numpy.flagsobj]
        flat: [1×1 py.numpy.flatiter]
        imag: [1×1 py.numpy.ndarray]
    itemsize: 8
      nbytes: 24
        ndim: 1
        real: [1×1 py.numpy.ndarray]
       shape: [1×1 py.tuple]
        size: 3
     strides: [1×1 py.tuple]

    [1 2 3]

對於此類型變量轉換過程,目前有兩種方法。ip

第一種方式是將 ndarray 變量轉換爲 Python 的 array.array 類型,隨後可利用 double 函數直接轉換爲 Matlab 變量。ci

data = double(py.array.array('d',py.numpy.nditer(value))); %d is for double, value is ndarray

第二種是利用 scipy 庫將變量儲存爲 mat 文件,隨後在 Matlab 中加載。get

import numpy as np
import scipy.io
x = np.linspace(0, 2 * np.pi, 100)
y = np.cos(x)
scipy.io.savemat('test.mat', dict(x=x, y=y))

相比第二種方法,第一種方法更爲直接。轉換爲 Matlab 變量後利用 reshape 修改向量大小便可。

相關文章
相關標籤/搜索