MATPAB рдореЗрдВ SciPy, рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ


SciPy (рд╕реНрдкрд╖реНрдЯ рд╕рд╛рдИ рдкрд╛рдИ) рдПрдХ рдЧрдгрд┐рддреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреИрдХреЗрдЬ рд╣реИ рдЬреЛ рдирдореНрдкреА рдкрд╛рдпрдерди рд╡рд┐рд╕реНрддрд╛рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред SciPy рдХреЗ рд╕рд╛рде, рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдкрд╛рдпрдерди рд╕рддреНрд░ MATLAB, IDL, рдСрдХреНрдЯреЗрд╡, рдЖрд░-рд▓реИрдм рдФрд░ SciLab рдЬреИрд╕реА рдЬрдЯрд┐рд▓ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╕рдВрдкреВрд░реНрдг рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкрд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ scipy.io I / O рдкреИрдХреЗрдЬ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬреЛ рдЖрдкрдХреЛ рдСрдХреНрдЯреЗрд╡ рдФрд░ MATLAB рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рдкрд░рд┐рдЪрдп


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, scipy.io рдкреИрдХреЗрдЬ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЖрдпрд╛рдд рдХрд░реЗрдВ:


import scipy.io as sio 

Scipy.io рдкреИрдХреЗрдЬ рдХреА рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдБ рдЬреЛ рдЖрдкрдХреЛ MATLAB рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ:


 sio.loadmat sio.savemat sio.whosmat 

MATLAB рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╕рдордЭреМрддреЗ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо GNU рдСрдХреНрдЯреЗрд╡ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ MATLAB рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдФрд░ рд▓реЛрдб рдХрд░рдирд╛ рд╣реИред рдУрдХреНрдЯреЗрд╡ рдкреНрд░реЙрдореНрдкреНрдЯ рдкрд░, рджрд░реНрдЬ рдХрд░реЗрдВ:


 octave:1> a = 1:12 a = 1 2 3 4 5 6 7 8 9 10 11 12 octave:2> a = reshape(a, [1 3 4]) a = ans(:,:,1) = 1 2 3 ans(:,:,2) = 4 5 6 ans(:,:,3) = 7 8 9 ans(:,:,4) = 10 11 12 octave:3> save -6 octave_a.mat a % MATLAB 6 compatible octave:4> ls octave_a.mat octave_a.mat 

рдкрд╛рдпрдерди рдореЗрдВ MATLAB рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб:


 mat_contents = sio.loadmat('octave_a.mat') mat_contents 

  {'__header__': b'MATLAB 5.0 MAT-file, written by Octave 4.2.2, 2019-02-02 20:26:43 UTC', '__version__': '1.0', '__globals__': [], 'a': array([[[ 1., 4., 7., 10.], [ 2., 5., 8., 11.], [ 3., 6., 9., 12.]]])} 

 oct_a = mat_contents['a'] oct_a 

  array([[[ 1., 4., 7., 10.], [ 2., 5., 8., 11.], [ 3., 6., 9., 12.]]]) 

 oct_a.shape 

 (1, 3, 4) 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдлрд╝рд╛рдЗрд▓ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрдврд╝реА рдЧрдИ рдереАред рдЕрдм SciPy рд╕реЗ MATLAB рддрдХ рдирд┐рд░реНрдпрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:


 import numpy as np vect = np.arange (10) vect.shape 

 (10,) 

 sio.savemat ('np_vector.mat', {'vect': vect}) 

рдСрдХреНрдЯреЗрд╡ рдореЗрдВ рдкрд╛рдпрдерди рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░реЗрдВ:


 octave:8> load np_vector.mat octave:9> vect vect = 0 1 2 3 4 5 6 7 8 9 octave:10> size(vect) ans = 1 10 

рдореЗрдореЛрд░реА рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝реЗ рдмрд┐рдирд╛ MATLAB рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реНрд╣рд╛рдЯреНрд╕рдореИрдЯ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:


 sio.whosmat ('octave_a.mat') 

 [('a', (1, 3, 4), 'double')] 

рд╡реНрд╣рд╛рдЯреНрд╕рдЯрдо рдлрд╝рдВрдХреНрд╢рди рдЯреНрдпреВрдкрд▓реНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рд╕рд░рдгреА (рдпрд╛ рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ) рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреЛ MATLAB рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЯрдкрд▓ рдореЗрдВ рдПрдХ рдирд╛рдо, рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИред


MATLAB рд╕рдВрд░рдЪрдирд╛рдПрдВ


MATLAB рд╕рдВрд░рдЪрдирд╛рдПрдВ Python dicts рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдлрд╝реАрд▓реНрдб рдирд╛рдо рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрд╖реЗрддреНрд░ рдорд╛рди рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ MATLAB MATrix LABoratory рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рд╣реИред рдХреНрдпреЛрдВрдХрд┐ MATLAB рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдореИрдЯреНрд░рд┐рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдПрдХрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЖрдХрд╛рд░ (1, 1) рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред


 octave:11> my_struct = struct('field1', 1, 'field2', 2) my_struct = { field1 = 1 field2 = 2 } octave:12> save -6 octave_struct.mat my_struct 

рдкрд╛рдпрдерди рдореЗрдВ MATLAB рд╕рдВрд░рдЪрдирд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ:


 mat_contents = sio.loadmat('octave_struct.mat') mat_contents 

 {'__header__': b'MATLAB 5.0 MAT-file, written by Octave 4.2.2, 2019-02-02 20:34:26 UTC', '__version__': '1.0', '__globals__': [], 'my_struct': array([[(array([[1.]]), array([[2.]]))]], dtype=[('field1', 'O'), ('field2', 'O')])} 

 oct_struct = mat_contents['my_struct'] oct_struct.shape 

 (1, 1) 

 val = oct_struct[0,0] val 

 (array([[1.]]), array([[2.]])) 

 val['field1'] 

 array([[1.]]) 

 val['field2'] 

 array([[2.]]) 

 val.dtype 

 dtype([('field1', 'O'), ('field2', 'O')]) 

0.12.0 рд╕реЗ SciPy рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, MATLAB рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╕рдВрд░рдЪрд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдереЗрд▓реЗ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рдирд╛рдо рд╕реБрдореЗрд░реБ рд╕рд░рдгреА рдХреЗ рдлрд╝реАрд▓реНрдб рдирд╛рдо рд╣реИрдВред рдлрд╝реАрд▓реНрдб рдирд╛рдореЛрдВ рдХреЛ dtype рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИред рд╕рдВрд░рдЪрд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВред


рдЗрд╕ рдкреНрд░рдХрд╛рд░, MATLAB рдореЗрдВ, рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдХрдо рд╕реЗ рдХрдо 2 рдбреА рдХрд╛ рдЖрдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ SciPy рдореЗрдВ рдкрдврд╝рдиреЗ рдкрд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред 1 рдХреЛ рдЖрдпрд╛рдо рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдЪреЛрдбрд╝_рдореЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:


 mat_contents = sio.loadmat ('octave_struct.mat', squeeze_me = True) oct_struct = mat_contents ['my_struct'] oct_struct.shape 

 () 

рдпрд╣ рдХрднреА-рдХрднреА MATLAB рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЦрд╕реНрддрд╛ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЕрдЬрдЧрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП struct_as_record = рдЧрд▓рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред


 mat_contents = sio.loadmat ('octave_struct.mat', struct_as_record = False) oct_struct = mat_contents ['my_struct'] oct_struct[0,0].field1 

 array([[1.]]) 

рд╕реНрдЯреНрд░рдХреНрдЪрд░_рдкрд╛рд╕_рдХреНрд░реЗрдбрд░реНрдб = рдЧрд▓рдд рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рдЪреЛрдбрд╝_рдореЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:


 mat_contents = sio.loadmat('octave_struct.mat', struct_as_record=False, squeeze_me=True) oct_struct = mat_contents['my_struct'] oct_struct.shape #  , ..     shape 

 --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-23-d41d0a59bb9b> in <module> 1 mat_contents = sio.loadmat('octave_struct.mat', struct_as_record=False, squeeze_me=True) 2 oct_struct = mat_contents['my_struct'] ----> 3 oct_struct.shape #  , ..   AttributeError: 'mat_struct' object has no attribute 'shape' 

 type(oct_struct) 

 scipy.io.matlab.mio5_params.mat_struct 

 oct_struct.field1 

 1.0 

рдЕрдЬрдЧрд░ рд╕реЗ MATLAB рддрдХ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдбрд┐рдХреНрд╕реЗрд╕ рдбрд┐рдХреНрд╢рдирд░реА рд╣реИ:


 a_dict = {'field1': 0.5, 'field2': 'a string'} sio.savemat ('saved_struct.mat', {'a_dict': a_dict}) 

MATLAB рдореЗрдВ рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:


 octave:21> load saved_struct octave:22> a_dict a_dict = scalar structure containing the fields: field1 = 0.50000 field2 = a string 

рддреБрдо рднреА рдЕрдЬрд╡рд╛рдпрди рдХреЗ рдлреВрд▓ рд╕реЗ MATLAB рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 dt = [('f1', 'f8'), ('f2', 'S10')] arr = np.zeros ((2,), dtype = dt) arr 

 array([(0., b''), (0., b'')], dtype=[('f1', '<f8'), ('f2', 'S10')]) 

 arr [0] ['f1'] = 0.5 arr [0] ['f2'] = 'python' arr [1] ['f1'] = 99 arr [1] ['f2'] = 'not perl' sio.savemat ('np_struct_arr.mat', {'arr': arr}) 

рдХреЛрд╢рд┐рдХрд╛рдУрдВ (рд╕реЗрд▓) MATLAB рдХреА рд╕рд░рдгрд┐рдпрд╛рдБ


MATLAB рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рдХрд┐рд░рдгреЗрдВ рдЕрдЬрдЧрд░ рдХреА рд╕реВрдЪреА рдХреА рддрд░рд╣ рд╣реИрдВред рд╕реЗрд▓ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рддрддреНрд╡ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ MATLAB рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рде рд╣реА, рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдмрд╣реБрдд рд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реЛрддреА рд╣реИрдВред MATLAB рд╕реЗ рд╕реБрдкреА рддрдХ рд╕реЗрд▓ рдХреЗ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред


 octave:14> my_cells = {1, [2, 3]} my_cells = { [1,1] = 1 [1,2] = 2 3 } octave:15> save -6 octave_cells.mat my_cells 

рд╡рд╛рдкрд╕ рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП:


 mat_contents = sio.loadmat ('octave_cells.mat') oct_cells = mat_contents ['my_cells'] print (oct_cells.dtype) 

 object 

 val = oct_cells [0,0] val 

 array([[1.]]) 

 print (val.dtype) 

 float64 

рд╣рдо numpy рд╕реЗ рд╕реЗрд▓ рдПрд░реЗ MATLAB рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВрдЧреЗ:


 obj_arr = np.zeros ((2,), dtype = np.object) obj_arr [0] = 1 obj_arr [1] = 'a string' obj_arr 

 array([1, 'a string'], dtype=object) 

 sio.savemat ('np_cells.mat', {'obj_arr': obj_arr}) 

рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЦрд╕рд░реЗ рд╕реЗ рдЕрд╖реНрдЯрдХ рддрдХ рдХреЛрд╢рд┐рдХрд╛ рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рд╕рд╣реА рд╣реИ:


 octave:16> load np_cells.mat octave:17> obj_arr obj_arr = { [1,1] = 1 [2,1] = a string } 

рд╢рд╛рдпрдж рдпрд╣реА рдЕрдВрдд рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдпрд╣ рд▓реЗрдЦ рдореБрдлреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде MATLAB рдореЗрдВ рдЕрдиреБрд╕рдВрдзрд╛рди рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рдмрд╣рд╛рдиреЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рд╕реНрд░реЛрдд: рдбрд░рд╛рд╡рдирд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ

Source: https://habr.com/ru/post/hi438600/


All Articles