Bạn có chia sẻ thêm chi tiết về cách tạo tệp "lib.mat" không? Tôi đã thử các bước sau:
>>lib.name='hello''hello'
>>Strs[1].id=1
>>Strs[2].id=2
>>Strs[3].id=3
>> lib.strs = strs
>> lib.strlist = {1,2,3}
>> lưu ['lib', 'lib']]'lib', 'lib']
Đây là những gì tôi thấy trong Python:
>>> obj = eng.load ['lib.mat'] ['lib']]'lib.mat']['lib']
...
ValueError: Chỉ có thể trả lại một cấu trúc vô hướng từ MATLABscalar struct can be returned from MATLAB
Đây là hành vi dự kiến vì mảng struct không được hỗ trợ theo tài liệu:
//www.mathworks.com/help/matlab/matlab_external/handle-data-returned-from-matlab-to-python.html
Trong trường hợp này, bản thân "lib" là một cấu trúc vô hướng nhưng phần tử "STRS" là một mảng cấu trúc.
Tôi đang sử dụng MATLAB [2014b] và Python [2.7.6] để lập trình hỗn hợp. Tôi đã cố gắng chuyển một cấu trúc từ Matlab sang Python, nhưng tôi đã thất bại.
Cấu trúc tôi muốn vượt qua là:
dmodel = struct ['regr', regr, 'corr', corr, 'theta', theta. ', ...'regr',regr, 'corr',corr, 'theta',theta.', ...
'beta', fit.beta, 'gamma', fit.gamma, 'sigma2', sy.^2.*fit.sigma2, ...,fit.beta, 'gamma',fit.gamma, 'sigma2',sY.^2.*fit.sigma2, ...
'S', s, 'ssc', [ms; ss], 'ysc', [của tôi; Sy], ...,S, 'Ssc',[mS; sS], 'Ysc',[mY; sY], ...
'C', fit.c, 'ft', fit.ft, 'g', fit.g];,fit.C, 'Ft',fit.Ft, 'G',fit.G];
Trong cấu trúc, tất cả các yếu tố là vô hướng ngoại trừ SSC và YSC.
Kịch bản MATLAB trông như thế này:
function model = fun_mat []model=Fun_mat[]
...
một số lệnh;command;
...
một số lệnh;
mô hình = dmodel;
chấm dứt
Và kịch bản Python trông như thế này:matlab.engine as meng
nhập matlab.engine với tư cách là meng
Eng = meng.start_matlab []
eng.quit[]
dmodel = eng.fun_mat []
Hai kịch bản này nằm trong cùng một thư mục.
Tôi có một tệp mat mà tôi truy cập bằng cách sử dụng
from scipy import io
mat = io.loadmat['example.mat']
Từ MATLAB, ví dụ.mat chứa cấu trúc sau
>> load example.mat
>> data1
data1 =
LAT: [53x1 double]
LON: [53x1 double]
TIME: [53x1 double]
units: {3x1 cell}
>> data2
data2 =
LAT: [100x1 double]
LON: [100x1 double]
TIME: [100x1 double]
units: {3x1 cell}
Trong MATLAB, tôi có thể truy cập dữ liệu dễ dàng như Data2.lon, v.v. Nó cho tôi một số tùy chọn mặc dù như
mat.clear mat.get mat.iteritems mat.keys mat.setdefault mat.viewitems
mat.copy mat.has_key mat.iterkeys mat.pop mat.update mat.viewkeys
mat.fromkeys mat.items mat.itervalues mat.popitem mat.values mat.viewvalues
Có thể bảo tồn cấu trúc tương tự trong Python không? Nếu không, làm thế nào để truy cập tốt nhất dữ liệu? Mã python hiện tại mà tôi đang sử dụng rất khó để làm việc.
Cảm ơn
Hỏi ngày 14 tháng 8 năm 2012 lúc 14:51Aug 14, 2012 at 14:51
MikepmikepmikeP
7812 Huy hiệu vàng10 Huy hiệu bạc19 Huy hiệu đồng2 gold badges10 silver badges19 bronze badges
5
Đã trả lời ngày 14 tháng 8 năm 2012 lúc 15:22Aug 14, 2012 at 15:22
MikepmikepmikeP
7812 Huy hiệu vàng10 Huy hiệu bạc19 Huy hiệu đồng2 gold badges10 silver badges19 bronze badges
1
Đã trả lời ngày 14 tháng 8 năm 2012 lúc 15:22
# Load the data into Python
D= sio.loadmat['data.mat']
# build a list of keys and values for each entry in the structure
vals = D['results'][0,0] #> thisStruct
ans =
var1: [1x1 struct]
var2: 3.5
>> thisStruct.var1
ans =
subvar1: [1x100 double]
subvar2: [32x233 double]
Sau đó, sử dụng mã của Mergen trong SCIPY.IO.LoadMat Cấu trúc lồng nhau [tức là từ điển]
Đã trả lời ngày 29 tháng 4 năm 2015 lúc 20:24Apr 29, 2015 at 20:24
BRAULIOBAULIObraulio
4202 Huy hiệu bạc9 Huy hiệu đồng2 silver badges9 bronze badges