خواندن ماتریس از فایل txt در متلب
ماتریسهای یکی از نوعهای دادهای پر کاربرد و پر اهمیت در متلب است، متلب که در بین رشتههای مختلف کاربرد علمی و تحقیقاتی دارد به علت پایهی ریاضی آن با دادههای ماتریس به سادگی میتواند کار کند. در این نوشته روش خواندن اطلاعات یک ماتریس کامل از فایل txt را در برنامهی متلب به شما آموزش خواهیم داد.
خواندن ماتریس از فایل txt در متلب
برای خواندن اطلاعات یک ماتریس از فایل txt در نرمافزار متلب از تابع زیر استفاده میکنیم.
function data = ReadMatrix(name)
data = [];
fid = fopen(name);
if fid == -1
disp(['File cannot be opened: ' name]);
return;
end;
magic_word = uint8(fread(fid,8,'uint8'));
magic = uint8('YANGVOCO');
if sum(abs(magic_word(:) - magic(:))) ~= 0
disp(['File format is wrong, magic: ' char(magic_word)]);
return;
end;
n_column = double(fread(fid,1,'int32'));
n_row = double(fread(fid,1,'int32'));
data = zeros(n_row, n_column);
for ii = 1:n_column
tmp = double(fread(fid,n_row,'float32'));
data(:, ii) = tmp(:);
end;
fclose(fid);
end
توضیحات
- کد بالا را از این لینک دریافت کنید.
- کد بالا یک تابع متلب است؛ این کد شامل یک تابع با نام ReadMatrix است.
- ورودی این تابع متغیر name است که نام فایل txt مورد نظر را باید به آن بدهید.
- خروجی این تابع یک ماتریس است که میتوانید آن را در برنامهی خود استفاده کنید.
در صورتی که روشهای بهتری برای این کار در اختیار دارید برای ما ارسال کنید.
برای امتیاز به این نوشته کلیک کنید!
[کل: 4 میانگین: 4.5]



















اگر تعداد عناصر فایل کمتر یا بیشتر از ابعاد ذکرشده باشه، کد چه رفتاری نشون میده؟
در این کد هنگام ذخیره هیچ بررسی اضافی انجام نشده، چون دادهها مستقیماً از متغیر data نوشته میشن. یعنی در مرحلهی نوشتن، ابعاد (n_row, n_column) دقیقاً مطابق دادههای واقعی ذخیره میشه و تناقضی پیش نمیاد. ولی اگر کسی در مرحلهی خواندن (تابع مقابل) بخواد فایل رو بخونه و مثلاً بایتها ناقص باشن یا با ابعاد همخوانی نداشته باشن:
بنابراین مدیریت این تناقض باید در تابع خواندن انجام بشه.
چرا اندیس حلقه روی ستونهاست نه روی سطرها؟
علتش اینه که در متلب ماتریسها به صورت ستونمحور (column-major order) ذخیره میشن. یعنی در حافظه دادههای هر ستون پشت سر هم قرار دارن.
اگر فایل خیلی بزرگ باشه، آیا این روش از نظر حافظه بهینه هست؟
بله.
چرا بهجای فرمت متنی از ساختار باینری با magic word استفاده شده؟
ترکیب باینری + magic word یه جور قرارداد سادهست برای: مطمئن شدن از درستی فایل، داشتن فایل کوچیکتر و سریعتر، و قابلحمل بودن بین زبانهای برنامهنویسی مختلف.
ُسلام وقت به خیر
فایل متنی اولیه این کد چیه، چه شکیه و داده هاش چطوری اند؟ اگر مقادیر در فایل بعد از خطی مشخص شروع شود مثلا چند خط اول متن باشد چی؟ یا تعداد داده ها مثلا در 10 ستون و تعداد زیادی مثلا 150 سطر باشد چه؟
بین اعداد موجود در ماتریس کاراکتر tab وجود دارد و برای سطرهای مختلف فایل متنی به خط جدید می رود