
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
--------------------------------------------------------------------------- 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 рдореЗрдВ рдЕрдиреБрд╕рдВрдзрд╛рди рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рдмрд╣рд╛рдиреЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рд╕реНрд░реЛрдд: рдбрд░рд╛рд╡рдирд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ