با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن. و کاربرانی که دوره کامل آموزش متلب را دنبال می کنند. ورود داده ها در MATLAB به معنی بارگیری داده ها از یک فایل خارجی است. این قابلیت در موارد بسیاری کاربرد دارد. با این روش شما می توانید فایل های حاوی برنامه های کاملی که شما به آن نیاز دارید را به برنامه ی خود اضافه کرده و از کدهای آن استفاده نمائید. تابع importdata اجازه بارگذاری فایل های مختلف داده از فرمت های مختلف را خارج از متلب می دهد. همچنین متلب توابع مختلفی را برای کار با فایل های داده از جمله اقدامات باز کردن ، بستن ، جستجو و … را در وارد کردن داده های فایل متنی در متلب را می دهد. برای آشنایی با ورود داده در متلب در ادامه ی مباحث این آموزش با ما همراه باشید.
در ابتدای مبحث آشنایی با ورود داده در متلب شما را با شکل های مختلف importdata در متلب آشنا می کنیم:
ردیف | تابع و عملکرد آن |
---|---|
۱ | (A = importdata(filename داده ها را به آرایه A از فایل مشخص شده توسط نام فایل بارگیری می کند. |
۲ | (A = importdata(‘-pastespecial’ داده ها را از کلیپ بورد سیستم و نه از یک فایل بارگیری می کند. |
۳ | (A = importdata(___, delimiterIn شما می توانید از delimiterIn با هر یک از آرگومان ورودی در دستورات بالا استفاده کنید.
|
۴ | (A = importdata(___, delimiterIn, headerlinesIn داده ها را از فایل ASCII، نام فایل یا کلیپ بورد بارگذاری می کند، داده های عددی را که از خط headerlinesIn + 1 شروع می شود، می خواند.
|
۵ | (___)A, delimiterOut, headerlinesOut] = importdata] علامت جدا کننده مشخص شده برای فایل ورودی ASCII در delimiterOut و تعداد خطوط هدر را در headerlinesOut،بر می گرداند. |
نکته: به طور پیش فرض متلب ()importdata را پشتیبانی نمی کند. باید این افزونه را در اینترنت جستجو کرده و نصب نمائید.
مثال ۱- برای نمونه می خواهیم یک فایل عکس را باز کنیم، برای این منظور کد زیر را در فایل اسکریپت ایجاد شده وارد کنید:
1 2 3 | filename = 'smile.jpg'; A = importdata(filename); image(A); |
زمانیکه شما فایل فوق را اجرا نمائید متلب نتیجه ی زیر را نمایش خواهد داد :
آشنایی با ورود داده در متلب
مثال ۲- در این مثال یک فایل متنی با نام weeklydata.txt را ایجاد کرده و ستون ها و هدر آن را مشخص می کنیم.
فایل متنی weeklydata.txt بصورت زیر است :
1 2 3 4 5 6 | SunDay MonDay TuesDay WednesDay ThursDay FriDay SaturDay 95.01 76.21 61.54 40.57 55.79 70.28 81.53 73.11 45.65 79.19 93.55 75.29 69.87 74.68 60.68 41.85 92.18 91.69 81.32 90.38 74.51 48.60 82.14 73.82 41.03 0.99 67.22 93.18 89.13 44.47 57.63 89.36 13.89 19.88 46.60 |
سپس یک فایل اسکریپت ایجاد کرده و کد زیر را در آن تایپ می کنیم:
1 2 3 4 5 6 7 8 9 10 11 12 | filename = 'weeklydata.txt'; delimiterIn = ' '; headerlinesIn = 1; A = importdata(filename,delimiterIn,headerlinesIn); % View data for k = [1:7] disp(A.colheaders{1, k}) disp(A.data(:, k)) disp(' ') end |
زمانیکه شما فایل فوق را اجرا کنید نتیجه ی آن در متلب بصورت زیر خواهد بود:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | SunDay 95.0100 73.1100 60.6800 48.6000 89.1300 MonDay 76.2100 45.6500 41.8500 82.1400 44.4700 TuesDay 61.5400 79.1900 92.1800 73.8200 57.6300 WednesDay 40.5700 93.5500 91.6900 41.0300 89.3600 ThursDay 55.7900 75.2900 81.3200 0.9900 13.8900 FriDay 70.2800 69.8700 90.3800 67.2200 19.8800 SaturDay 81.5300 74.6800 74.5100 93.1800 46.6000 |
مثال ۳- در این مثال وارد کردن داده ها از کلیبورد را بررسی می کنیم.
ابتدا کد زیر را به کلیبورد کپی کنید:
1 | A = importdata('-pastespecial') |
با اجرای فایل فوق در متلب ، نتیجه ی زیر ظاهر خواهد شد :
1 2 | A = 'Mathematics is simple' |
تابع importdata یک تابع سطح بالا در متلب است.
توابع فایل I / O در سطح پایین در MATLAB اجازه می دهد تا بیشترین کنترل را بر خواندن یا نوشتن داده ها در یک فایل داشته باشید.
MATLAB توابع زیر را برای عملیات خواندن و نوشتن در سطح بایت یا کاراکتر را فراهم می کند:
Function | Description |
---|---|
fclose | برای بستن یک یا تمام فایل های باز استفاده می شود. |
feof | انتهای فایل را تست می کند. |
ferror | اطلاعات خطاهای I/O را نمایش می دهد. |
fgetl | خطی از فایل را خوانده و خطهای خط جدید را حذف می کند. |
fgets | خطی از فایل را خوانده و خطهای خط جدید را حفظ می کند. |
fopen | فایلی را باز کرده و یا اطلاعاتی درباره ی فایل های باز می دهد. |
fprintf | داده ها را در فایل متنی می نویسد. |
fread | داده ها را از فایل دودویی می خواند. |
frewind | نشانگر موقعیت فایل را به آغاز فایل می برد. |
fscanf | داده ها را از فایل متنی می خواند. |
fseek | نشانگر موقعیت را در طول فایل جاه به جا می کند. |
ftell | موقعیت یک فایل باز را نشان می دهد. |
fwrite | داده ها را در یک فایل دودویی می نویسد. |
MATLAB توابع زیر را برای وارد کردن فایل های داده متنی سطح پایین در اختیار شما قرار می دهد:
ما یک فایل داده متنی “myfile.txt” داریم که در دایرکتوری کاری ما ذخیره شده است.
پرونده ها اطلاعات بارندگی را برای سه ماه ژوئن، جولای و اوت برای سال ۲۰۱۲ ذخیره می شود.
داده های موجود در myfile.txt شامل مجموعه های مکرر اندازه گیری زمان، ماه و بارش در پنج مکان است.
داده ی هدر تعداد ماههای ماه را ذخیره می کند. بنابراین ما مجموعه ای از اندازه گیری های M را داریم.
فایل فوق به این صورت خواهد بود:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | Rainfall Data Months: June, July, August M = 3 12:00:00 June-2012 17.21 28.52 39.78 16.55 23.67 19.15 0.35 17.57 NaN 12.01 17.92 28.49 17.40 17.06 11.09 9.59 9.33 NaN 0.31 0.23 10.46 13.17 NaN 14.89 19.33 20.97 19.50 17.65 14.45 14.00 18.23 10.34 17.95 16.46 19.34 09:10:02 July-2012 12.76 16.94 14.38 11.86 16.89 20.46 23.17 NaN 24.89 19.33 30.97 49.50 47.65 24.45 34.00 18.23 30.34 27.95 16.46 19.34 30.46 33.17 NaN 34.89 29.33 30.97 49.50 47.65 24.45 34.00 28.67 30.34 27.95 36.46 29.34 15:03:40 August-2012 17.09 16.55 19.59 17.25 19.22 17.54 11.45 13.48 22.55 24.01 NaN 21.19 25.85 25.05 27.21 26.79 24.98 12.23 16.99 18.67 17.54 11.45 13.48 22.55 24.01 NaN 21.19 25.85 25.05 27.21 26.79 24.98 12.23 16.99 18.67 |
ما داده های خود را از این فایل وارد می کنیم.
حالا مراحل زیر را دنبال کنید :
فایل را با تابع fopen باز کرده و شناسه فایل را دریافت کنید.
داده های موجود در فایل با مشخصه های قالب، مانند ‘٪ s’ برای یک رشته، ‘٪ d’ برای یک عدد صحیح، یا ‘٪ f’ برای یک عدد اعشاری، را توصیف کنید.
برای رد کردن کاراکترهای حروف در فایل، آنها را در توضیحات فرمت قرار دهید.
برای جست و جوی یک فیلد داده، از ستاره (‘*’) در specifier استفاده کنید.
برای مثال، برای خواندن سرصفحه ها و بازگشت به یک مقدار برای M، کد زیر را تایپ کنید:
1 | M = fscanf(fid, '%*s %*s\n%*s %*s %*s %*s\nM=%d\n\n', 1); |
به طور پیشفرض، fscanf با توجه به توصیف فرمت ما، داده ها را می خواند تا زمانی که برای داده ها مطابقت نداشته باشد یا به پایان فایل برسد.
در اینجا ما برای خواندن ۳ مجموعه داده ها از حلقه استفاده می کنیم.
هر بار آن را در ۷ ردیف و ۵ ستون می خوانیم.
ما یک ساختار به نام mydata در فضای کاری ایجاد خواهیم کرد تا اطلاعاتی را که از فایل خوانده می شود ذخیره کنیم.
این ساختار دارای سه فیلد time، month، and array raindata. است.
یک فایل اسکریپت ایجاد کرده و کد زیر را در آن تایپ کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | filename = '/data/myfile.txt'; rows = 7; cols = 5; % open the file fid = fopen(filename); % read the file headers, find M (number of months) M = fscanf(fid, '%*s %*s\n%*s %*s %*s %*s\nM=%d\n\n', 1); % read each set of measurements for n = 1:M mydata(n).time = fscanf(fid, '%s', 1); mydata(n).month = fscanf(fid, '%s', 1); % fscanf fills the array in column order, % so transpose the results mydata(n).raindata = ... fscanf(fid, '%f', [rows, cols]); end for n = 1:M disp(mydata(n).time), disp(mydata(n).month) disp(mydata(n).raindata) end % close the file fclose(fid); |
زمانیکه در متلب فایل فوق را اجرا کنید نتیجه ی زیر را مشاهده خواهید کرد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 12:00:00 June-2012 17.2100 17.5700 11.0900 13.1700 14.4500 28.5200 NaN 9.5900 NaN 14.0000 39.7800 12.0100 9.3300 14.8900 18.2300 16.5500 17.9200 NaN 19.3300 10.3400 23.6700 28.4900 0.3100 20.9700 17.9500 19.1500 17.4000 0.2300 19.5000 16.4600 0.3500 17.0600 10.4600 17.6500 19.3400 09:10:02 July-2012 12.7600 NaN 34.0000 33.1700 24.4500 16.9400 24.8900 18.2300 NaN 34.0000 14.3800 19.3300 30.3400 34.8900 28.6700 11.8600 30.9700 27.9500 29.3300 30.3400 16.8900 49.5000 16.4600 30.9700 27.9500 20.4600 47.6500 19.3400 49.5000 36.4600 23.1700 24.4500 30.4600 47.6500 29.3400 15:03:40 August-2012 17.0900 13.4800 27.2100 11.4500 25.0500 16.5500 22.5500 26.7900 13.4800 27.2100 19.5900 24.0100 24.9800 22.5500 26.7900 17.2500 NaN 12.2300 24.0100 24.9800 19.2200 21.1900 16.9900 NaN 12.2300 17.5400 25.8500 18.6700 21.1900 16.9900 11.4500 25.0500 17.5400 25.8500 18.6700 |
متلب به شما اجازه می دهد تا فایل هایی با فرمت m را به محیط کاری متلب وارد کرده و از کدهای آن استفاده کنید. این قابلیت مخصوصا در تکمیل برنامه های بزرگ مفید بوده و باعث صرفه جویی در وقت می شود. امیدواریم از مبحث آشنایی با ورود داده در متلب که آخرین مبحث فصل جاری می باشد بخوبی بهره مند شده باشید.
تاکنون آموزش ها ی پایه و مقدماتی متلب را فرا گرفتید در فصل بعدی به آموزش های پیشرفته از جمله رسم گرافیکی و نمودارها می پردازیم.
vida
سلام وقت شما بخیر، بنده یک فایل متنی دارم که شامل ردیف و ستون هستش الان در متلب میخواهم هر کدام از این ستون ها را در یک ماتریس قرار دهم ولی نمیدونم باید چجوری کدش رو بنویسم و از چه دستوراتی استفاده کنم ممنون میشم راهنمایی بفرمایید.
پی وی لرن
با سلام
می توانید از این کد استفاده کنید.
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
تابع بالا را می توانید از مخزن گیت هاب در این لینکمشاهده کنید.
بکتاش
سلام
تعداد زیادی فایل عکس دارم . باید تک تک وارد نرم افزار متلب بشن یا دستوری هست که بشه با اون همه فایل ها رو وارد کرد.
فایل ها عکس هستن و همه یک فرمت دارن.
ممنون میشم راهنمایی بفرمایید
صادق
سلام. شما می تونید از حلقه for یا while برای دریافت همه عکس ها استفاده کنید.
نگار منفرد
سلام .وقت بخیر من داده هام به صورت سلول هست مثلا data1 =1*15 cell (به صورت زیر ) و در هر کدام از این سلول ها ماتریس هایی با سطر و ستون مختلف وحود دارد چجوری میتونم اینا رو نرمالیزه کنم ؟؟ (از دستور normalize که استفاده میکنم بهم ارور میده میخوام داده هام بین ۰ و۱ باشد.)با تشکر فراوان
data1={13*245 double,13*277 double,13*330double,13*222 double ,13*263double, 13*269 double ,……..} به همین صورت تا سلول ۱۵ام.
سعید
سلام بنده یه مقاله دارم می خواستم کمک بگیرم از شما لطفا در صورت امکان با شماره ۰۹۳۵۸۸۰۸۱۰۴ تماس بگیرید. تا بنده با شما هماهنگ شوم
رحمان
با سلام
بنده برای لینک کردن نرم افزار متلب با یک نرم افزار رشته برق با فرمت ASCII کمک میخواستم.