فهرست بستن

باز خوانی اطلاعات ذخیره شده توسط متلب در پایتون

اگر جزو افرادی هستید که قبلا محاسبات علمیتان را با متلب انجام می دادید و در حال مهاجرت به پایتون هستید، احتمال قوی برایتان پیش می آید که بخواهید اطلاعات حاصل از محاسبات متلب را که ذخیره نموده اید، از طریق پایتون باز کرده و محاسبات دیگری را با پایتون بر روی داده ها انجام دهید. در این نوشته باز خوانی اطلاعات ذخیره شده با متلب در پایتون توضیح داده خواهد شد.

بسم الله الرحمن الرحیم

کتابخانه SciPy بهمراه کتابخانه‌های NumPy و matplotlib بعنوان ابزاری قوی برای محاسبات علمی در زبان برنامه‌نویسی پایتون مطرح شده است. این مجموعه کتابخانه‌ها به سرعت در حال جذب مخاطب و جایگزینی متلب می باشد. در این نوشته به بررسی نحوه باز خوانی داده های ذخیره شده در متلب با استفاده از کلاس io از کتابخانه scipy پرداخته خواهد شد.

قبل از هر کار کلاس io از کتابخانه scipy را فراخوانی می‌نماییم:

import scipy.io as sio

توابعی از sio که مد نظر ما هستند عبارت اند از:

  • sio.loadmat: فایل متلبی را باز خوانی می کند.
  • sio.savemat: نوع dictionary از اسامی متغیرها و خود متغیرها (آرایه ها) را در فایل متلب .mat ذخیره می نماید.
  • sio.whosmat: متغیرهای داخل یک فایل متلب را لیست می نماید.

کد زیر خواندن یک فایل داده متلب (ایجاد شده با اُکتاو؛ ویرایش توسعه داده شده به شکل متن باز متلب) را در پایتون نشان می‌دهد:

>>> mat_contents = sio.loadmat('a.mat')
>>> mat_contents
{'a': array([[[  1.,   4.,   7.,  10.],
        [  ۲٫,   ۵٫,   ۸٫,  ۱۱٫],
        [  ۳٫,   ۶٫,   ۹٫,  ۱۲٫]]]),
 '__version__': '1.0',
 '__header__': 'MATLAB 5.0 MAT-file, written by
 Octave 3.6.3, 2013-02-17 21:02:11 UTC',
 '__globals__': []}
>>> oct_a = mat_contents['a']
>>> oct_a
array([[[  1.,   4.,   7.,  10.],
        [  ۲٫,   ۵٫,   ۸٫,  ۱۱٫],
        [  ۳٫,   ۶٫,   ۹٫,  ۱۲٫]]])
>>> oct_a.shape
(۱, ۳, ۴)

لازم به ذکر است استفاده از این روش بستگی به ویرایش متلبی که فایل mat را ایجاد کرده می باشد. لذا بعضی مواقع ممکن است با خطای زیر مواجه شوید:

Please use HDF reader for matlab v7.3 files

در این صورت می توانید از کتابخانه h5py استفاده نمایید:

import h5py
with h5py.File('test.mat', 'r') as f:
    f.keys()

f یک dict است که متغیرها از طریق آن قابل دسترسی می باشند.