سؤال

معرفتي بـ MATLAB هي فقط على أساس الحاجة إلى المعرفة، لذلك ربما يكون هذا سؤالًا أوليًا.ومع ذلك هنا يأتي:

لقد حصلت على ملف يحتوي على بيانات (أعداد صحيحة 16 بت) مخزنة بتنسيق ثنائي.كيف يمكنني قراءتها في ناقل/مصفوفة في MATLAB؟كيف أكتب هذه البيانات إلى ملف في MATLAB؟هل هناك أي تعديل ذكي لزيادة سرعة الأداء عند قراءة/كتابة كمية كبيرة من البيانات (جيجابايت)؟

هل كانت مفيدة؟

المحلول

مثل بيل السحلية كتب أنه يمكنك استخدام fread لتحميل البيانات في ناقل.أريد فقط أن أتوسع قليلاً في إجابته.

قراءة البيانات

>> fid=fopen('data.bin','rb') % opens the file for reading
>> A = fread(fid, count, 'int16') % reads _count_ elements and stores them in A.

الأوامر com.fopen و فريد الافتراضي هو ترميز Little-endian[1] للأعداد الصحيحة.إذا كان ملفك مشفرًا بـ Big-endian، فستحتاج إلى تغيير فريد ل

>> A = fread(fid, count, 'int16', 'ieee-be');

أيضًا، إذا كنت تريد قراءة مجموعة الملفات بأكملها

>> count=inf;

وإذا كنت تريد قراءة البيانات في مصفوفة مع ن استخدام الأعمدة

>> count=[n inf];

كتابة البيانات

أما بالنسبة لذكاء البيانات إلى ملف.الامر، com.fwrite, ، في بيل سيتم كتابة الإجابة إلى ملف ثنائي.إذا كنت تريد كتابة البيانات في ملف نصي يمكنك استخدامه com.dlmwrite

>> dlmwrite('data.csv',A,',');

مراجع

[1] http://en.wikipedia.org/wiki/Endianness

تحديث

  1. تنسيق الجهاز (IE، iee-be, ieee لو, vaxd إلخ) من البيانات الثنائية يمكن تحديدها إما في ملفcom.fopen أو ال فريد الأوامر في ماتلابيمكن العثور على تفاصيل تنسيق الماكينة المدعومة في وثائق MATLAB لـ com.fopen.

  2. سكوت فرينش التعليق على إجابة بيليقترح قراءة البيانات في متغير INT16.للقيام بهذا الاستخدام

    >> A = int16(fread(fid,count,precision,machineFormat));
    

    أين عدد هو حجم/شكل البيانات المراد قراءتها ، دقة هو تنسيق البيانات ، و تنسيق الآلةهو ترميز كل بايت.

  3. انظر الأوامر com.fseek للتنقل حول الملف.على سبيل المثال،

    >> fseek(fid,0,'bof');
    

    سيتم إرجاع الملف إلى البداية حيث bof تمثل بداية الملف.

نصائح أخرى

وعلى افتراض انك تعرف كم عدد القيم التي قمت بتخزينها في الملف، يمكنك أن تفعل شيئا من هذا القبيل لقراءة البيانات في صفيف.

fid = fopen('data.bin','rb')
A = fread(fid, count, 'int16')

لإرسال البيانات إلى ملف قيام بذلك:

fid = fopen('data.bin','w')
count = fwrite(fid, A, 'int16')

وظيفة fwrite بإرجاع عدد <م> عناصر (وليس بايت) كتابة إلى الملف.

وبقدر ما يذهب ضبط الأداء، يمكنك قراءة البيانات في قطع لاستخدام فقط بقدر ما تحتاج إلى معالجة. هذا هو نفسه في أي لغة، وليس هناك طريقة لتسريع العملية وهذا تحديدا إلى ماتلاب.

وأنا عادة ما أكره رؤية الروابط في الرد، ولكن هذه تبدو جميلة وثيقة:

http://www.mathworks.com/support/tech -notes / 1400 / 1403.html

وأما بالنسبة للجزء الثاني من ضبط الأداء، انها كانت 6 سنوات منذ ان كنت تستخدم ماتلاب، لذلك أنا لا أعرف.

وHTH

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top