পাইথনে .mat ফাইলগুলি পড়ুন


383

পাইথনে বাইনারি এমএটিএলবি। ম্যাট ফাইলগুলি পড়া কি সম্ভব?

আমি দেখেছি যে সায়পাই .mat ফাইলগুলি পড়ার জন্য সমর্থন দাবি করেছে, তবে আমি এটির সাথে ব্যর্থ। আমি সাইপাই সংস্করণ 0.7.0 ইনস্টল করেছি এবং আমি loadmat()পদ্ধতিটি খুঁজে পাচ্ছি না ।

উত্তর:


517

একটি আমদানি প্রয়োজন, import scipy.io...

import scipy.io
mat = scipy.io.loadmat('file.mat')

6
অফিসিয়াল SciPy.io টিউটোরিয়াল: docs.scipy.org/doc/scipy/references/tutorial/io.html
ফ্রাঙ্ক ডারননকোর্ট

18
স্কিপি v7.3 মাদুর ফাইলগুলি সমর্থন করে না ( এখানে নোট দেখুন )। সমাধানের জন্য বিক্রান্ত দ্বারা উত্তর দেখুন ।
টেকনিক

তবে আপনি আগের সংস্করণ হিসাবে মাদুর-ফাইলগুলি সংরক্ষণ করতে পারেন। দেখুন: mathworks.com/help/matlab/import_export/mat-file-versions.html (শিরোনাম: 'ননডিফল্ট এমএটি-ফাইল সংস্করণে সংরক্ষণ করুন')
ওয়াটসোনিক

5
যেমনsave('myfile.mat','-v7')
ওয়াটসোনিক

149

না ম্যাটল্যাব অ্যারে সংস্করণ 7.3 এর জন্য কাজ করবে scipy.io.savematনা scipy.io.loadmat। তবে ভাল অংশটি হ'ল ম্যাটল্যাব সংস্করণ 7.3 ফাইলগুলি এইচডিএফ 5 ডেটাসেট। সুতরাং সেগুলি NumPy সহ বেশ কয়েকটি সরঞ্জাম ব্যবহার করে পড়া যায় ।

পাইথনের জন্য, আপনাকে h5pyএক্সটেনশনটির প্রয়োজন হবে , আপনার সিস্টেমে এইচডিএফ 5 প্রয়োজন requires

import numpy as np
import h5py
f = h5py.File('somefile.mat','r')
data = f.get('data/variable1')
data = np.array(data) # For converting to a NumPy array

6
এটি দুর্দান্ত কাজ করে, যদি আপনি মাতলাবে '-v7.3' পতাকাটি আপনার ডেটা সংরক্ষণের সময় ব্যবহার করেন। ডিফল্ট save(অন্তত মতলব আর -2014 বি) ব্যবহার করার ফলে উপরের কৌশলটি ব্যবহার করে পড়া যায় না এমন একটি ফলের ফলাফল। আপনি যদি '-v7.3' পতাকা ব্যবহার করেন তবে সংখ্যাটি তথ্য ঠিকঠাক পড়তে পারে।
চিপাউদেটে

3
হ্যাঁ, আমি আমার পোস্টে এটি বলেছি। মতলব সংরক্ষণ করার সময় আপনাকে -v7.3 ব্যবহার করতে হবে। এটি আরও ভাল / আরও সমর্থিত / মানকযুক্ত ফর্ম্যাটটি ব্যবহার করার সাথে সাথে এটি করা উচিত।
ভিক্রেন্ট

4
আপনি দয়া করে ব্যাখ্যা করতে পারেন যে আপনার উদাহরণে f এবং ডেটার মধ্যে সম্পর্ক কী ? আমি কিভাবে স্থানান্তর করতে পারেন একটি numpy অ্যারের কিভাবে?
হেরচো

প্রম্পট থেকে এই কমান্ডটি দিয়ে একটি পরিবর্তনশীল সংরক্ষণ করুন:save('filename', '-v7.3', 'var1');
কেভিন কাটজেকে

23

প্রথমে .mat ফাইলটি সংরক্ষণ করুন:

save('test.mat', '-v7')

এর পরে, পাইথনে, সাধারণ loadmatফাংশনটি ব্যবহার করুন :

import scipy.io as sio
test = sio.loadmat('test.mat')

15

একটি দুর্দান্ত প্যাকেজ বলা হয়েছে mat4pyযা ব্যবহার করে সহজেই ইনস্টল করা যায়

pip install mat4py

এটি ব্যবহার করা সোজা (ওয়েবসাইট থেকে):

একটি এমএটি-ফাইল থেকে ডেটা লোড করুন

ফাংশনটি loadmatএমএটি-ফাইলটিতে সঞ্চিত সমস্ত ভেরিয়েবলগুলি কেবল পাইথন dictএবং listঅবজেক্ট ব্যবহার করে একটি সাধারণ পাইথন ডেটা স্ট্রাকচারে লোড করে। সংখ্যা এবং সেল অ্যারেগুলি সারি-আদেশযুক্ত নেস্টেড তালিকায় রূপান্তরিত হয়। অ্যারেগুলি কেবল একটি উপাদান দিয়ে অ্যারেগুলি মুছে ফেলার জন্য আটকানো হয়। ফলস্বরূপ ডেটা কাঠামো সরল প্রকারের সমন্বয়ে গঠিত যা JSON ফর্ম্যাটের সাথে সামঞ্জস্যপূর্ণ ।

উদাহরণ: পাইথন ডেটা স্ট্রাকচারে একটি এমএটি-ফাইল লোড করুন:

from mat4py import loadmat

data = loadmat('datafile.mat')

ভেরিয়েবল dataহ'ল dictম্যাট-ফাইলে থাকা ভেরিয়েবল এবং মান সহ।

একটি পাইথন ডেটা কাঠামো একটি এমএটি-ফাইলে সংরক্ষণ করুন

পাইথন ডেটা ফাংশন সহ একটি এমএটি-ফাইলে সংরক্ষণ করা যায় savemat। ডেটা হিসাবে জন্য একই ভাবে গঠিত হবে loadmat, IE এটা সহজ ধরনের তথ্য, মত গঠিত হবে dict, list, str, int, এবং float

উদাহরণ: একটি ম্যাথ-ফাইলে পাইথন ডেটা কাঠামো সংরক্ষণ করুন:

from mat4py import savemat

savemat('datafile.mat', data)

প্যারামিটারটি ভেরিয়েবলগুলির সাথে dataএকটি হবে dict


নোট করুন যে mat4py আপনাকে জিনস-জাতীয় গাছের ডিক্টস, তালিকাগুলি, তালিকার তালিকাগুলি সরবরাহ করে ... - কোনও বিন্দু নয়। ( mat4py/cmd.py my.matলিখেছেন my.json, 1 দীর্ঘ লাইন।)
ডেনিস

1
@ এডিস: হ্যাঁ, এটি উপরেও বলা হয়েছে। তবে সত্যিই একটি ভাল বিষয়: আমি সাধারণত এই কাঠামোটি পছন্দ করি, যেমন ওয়েব অ্যাপ্লিকেশনগুলিতে নম্পি অ্যারেগুলি JSON সিরিয়ালযোগ্য নয়
ক্লেব

mat4py.loadmat.ParseError: Can only read from Matlab level 5 MAT-files
মুখোমুখি

@ এস 2 টি 2: এর আগে কখনও এই ইস্যুতে দৌড়েনি। আপনি কোন মতলব সংস্করণ এবং কোন স্কিপি সংস্করণ ব্যবহার করছেন?
ক্লিব

পার্সেররর: অপ্রত্যাশিত ক্ষেত্রের নাম দৈর্ঘ্য: 43
আলেকসেজেস ফমিন্স

13

ম্যাটল্যাব 2014 বি বা আরও নতুন ইনস্টল থাকা, পাইথনের জন্য ম্যাটল্যাব ইঞ্জিনটি ব্যবহার করা যেতে পারে:

import matlab.engine
eng = matlab.engine.start_matlab()
content = eng.load("example.mat", nargout=1)

আমি এই ত্রুটিটি পেয়েছি: মডিউলনটফাউন্ডএরর: 'পাইব্ল্যাব' নামে কোনও মডিউল নেই।
বৃষ্টি হচ্ছে

3
এই উত্তরগুলি চেষ্টা করার সময় আপনি ত্রুটি পেয়েছেন? এটি বিজোড়, এটি পাইব ব্যবহার করে না।
ড্যানিয়েল

11

ফাইল পড়া হচ্ছে

import scipy.io
mat = scipy.io.loadmat(file_name)

এমএটি ভেরিয়েবলের ধরণ নিরীক্ষণ

print(type(mat))
#OUTPUT - <class 'dict'>

কী অভিধান ভেতরে ম্যাটল্যাব ভেরিয়েবল , এবং মান হয় যারা ভেরিয়েবল নির্ধারিত বস্তু


7

রয়েছে পাইথন জন্য ম্যাটল্যাব ইঞ্জিন MathWorks নিজে। আপনার যদি ম্যাটল্যাব থাকে তবে এটি বিবেচনা করার মতো হতে পারে (আমি নিজে এটি চেষ্টা করি নি তবে এটি কেবল ম্যাটল্যাব ফাইলগুলি পড়ার চেয়ে অনেক বেশি কার্যকারিতা রয়েছে)। তবে, আমি জানি না এটি অন্য ব্যবহারকারীর কাছে বিতরণ করার অনুমতি দেওয়া হয়েছে কিনা (যদি সেই ব্যক্তিদের ম্যাটল্যাব থাকে তবে এটি সম্ভবত কোনও সমস্যা নয় Otherwise অন্যথায়, সম্ভবত নুমপি যাওয়ার সঠিক উপায়?)।

এছাড়াও, আপনি যদি সমস্ত বুনিয়াদি নিজেই করতে চান তবে ম্যাথ ওয়ার্কস (যদি লিঙ্কটি পরিবর্তন হয় তবে গুগল করার চেষ্টা করুন matfile_format.pdfবা এর শিরোনামটি MAT-FILE Format) ফাইল ফর্ম্যাটটির কাঠামোর বিষয়ে বিশদ ডকুমেন্টেশন। আমি ব্যক্তিগতভাবে ভেবেছিলাম এটি এত জটিল নয়, তবে স্পষ্টতই, এটি যাওয়ার সহজ উপায় নয়। .matআপনি-ফাইলগুলির কতগুলি বৈশিষ্ট্য সমর্থন করতে চান তার উপরও এটি নির্ভর করে ।

আমি একটি "ছোট" (প্রায় 700 লাইন) পাইথন স্ক্রিপ্ট .matলিখেছি যা কিছু বেসিক- ফাইলগুলি পড়তে পারে । আমি পাইথন বিশেষজ্ঞ বা শিক্ষানবিশ নই এবং এটি লিখতে আমার প্রায় দুই দিন সময় লেগেছিল (উপরে উল্লিখিত ম্যাথ ওয়ার্কস ডকুমেন্টেশন ব্যবহার করে)। আমি অনেক নতুন জিনিস শিখেছি এবং এটি বেশ মজাদার ছিল (বেশিরভাগ সময়)। যেহেতু আমি পাইথন লিপিটি কর্মক্ষেত্রে লিখেছি, আমি ভয় করি যে আমি এটি প্রকাশ করতে পারি না ... তবে আমি এখানে কিছু পরামর্শ দিতে পারি:

  • প্রথমে ডকুমেন্টেশন পড়ুন।
  • একটি হেক্স সম্পাদক ব্যবহার করুন (যেমন এইচএক্সডি ) এবং .matআপনি যে বিশ্লেষণ করতে চান তা একটি রেফারেন্স দেখুন ।
  • .Txt ফাইলে বাইটস সংরক্ষণ করে প্রতিটি বাইটটির অর্থ বের করার চেষ্টা করুন এবং প্রতিটি লাইনটি বেনিফিট করুন।
  • প্রতিটি তথ্য উপাদান সংরক্ষণ করতে শ্রেণীর ব্যবহার করুন (যেমন miCOMPRESSED, miMATRIX, mxDOUBLE, অথবা miINT32)
  • .mat-Files 'গঠন একটি গাছ ডাটা স্ট্রাকচার ডাটা উপাদান সংরক্ষণের জন্য অনুকূল নয়; প্রতিটি নোডের একটি শ্রেণি এবং সাবনোড থাকে

9
এটি ম্যাথওয়ার্ক দ্বারা সরবরাহ করা কোনওরকম উন্মাদ ডকুমেন্টেশন। 40 পৃষ্ঠাগুলি বিন্যাসটি ব্যাখ্যা করে, এটি উল্লেখ না করেই এটি HDF5 এর উপসেট।
ড্যানিয়েল

-1
from os.path import dirname, join as pjoin
import scipy.io as sio
data_dir = pjoin(dirname(sio.__file__), 'matlab', 'tests', 'data')
mat_fname = pjoin(data_dir, 'testdouble_7.4_GLNX86.mat')
mat_contents = sio.loadmat(mat_fname)

পাইথনের ডিফল্ট সংরক্ষিত .mat ফাইলটি পড়তে আপনি উপরের কোডটি ব্যবহার করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.