Вызовите функцию Matlab с содержимым файла .mat в качестве аргумента из Python - PullRequest
0 голосов
/ 05 июля 2019

Я создаю программное обеспечение, и часть этого программного обеспечения должна прочитать файл .mat и передать содержимое функции matlab в качестве аргумента.Проблема в том, что у меня плохая структура данных, я думаю.

На самом деле моя структура Matlab, называемая дескрипторы , не имеет такую ​​же структуру данных, как мои обрабатывает в моем Python ( после преобразования )

Когда я загружаю файл .mat из python с помощью scipy.io.loadmat() , у меня есть эти 4 клавиши:

enter image description here

Так что в handles.simulation должно быть это содержимое:

enter image description here

enter image description here

Поэтому я использую matlab.engine для вызова функции matlab, в моем случае функция вызывается VS_Parametrise и когда я передаю свои ручки который dict :

# -*- coding: utf-8 -*-

import sys
import os
import Tkinter
import numpy as np

from tkFileDialog import askopenfilename
from structDataConfFile import structConfFile

try:
    import matlab.engine
except:
    print "No matlabEngine installed"
    print "Running installation procedure..."
    print " "
    import installMatlabEngine
    print " "
    print "Application will exit now..."
    print "Please re-run this program to continue installation!"
    print " "
    exit()

# Environment PATH
Mlab = os.environ.get("MATLAB")
vssFolderPath=os.environ.get("CONTIAME")+'/4_Tools/Veh_Sim_Suite/VSimu'
ContimodelPath=os.environ.get("CONTIAME")

FILETYPES = [ ("text files", "*.mat") ]

handles = dict()

def selectConfFile():
    """ Return the path of .mat file

    Function that open files browser to choose a .mat file and build handles
    dictionnary.
    """
    Tkinter.Tk().withdraw() # Close the root window
    in_path = askopenfilename(filetypes=FILETYPES)
    if len(in_path) == 0:
        handles['Simulation'] = list()
    elif len(in_path) > 0:
        handles['Simulation'] = structConfFile(in_path) # HERE I FILL SIMULATION
    handles['contimodel_path'] = ContimodelPath
    return in_path

def Parametrize(confFile):
    """ Return

    Argument:
    confFile    --  str()   Configuration File path

    Function that call MatLab function passing handles structure/dict as
    argument. The return value of MatLab function called VS_Parametrize(handles)
    is the modified handles structure.
    """
    eng = matlab.engine.start_matlab()
    eng.addpath(vssFolderPath)
    eng.VS_Parametrise(handles) ############# HERE I CALL VS_PARAMETRIZE

В моей функции Matlab handles.simulation есть структура структурыструктуры.В Python это должен быть словарь словаря словаря, но у меня есть эта ошибка:

enter image description here

И я не понимаю, почему, когда я загружаю файл вPython первый этаж структуры данных - это dict, а второй - numpy.ndarray (1-й этаж: симуляция, 2-й этаж: параметр / информация).Вот еще документация о переменных Matlab to Python

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...