سؤال

لدي ملفات تحتوي على العديد من الخلايا الفارغة والتي تظهر على شكل NaNs عندما أستخدمها cell2mat, ولكن المشكلة هي أنه عندما أحتاج إلى الحصول على القيم المتوسطة لا أستطيع العمل مع هذا لأنه يظهر خطأ في NaN.في برنامج Excel يتجاهل قيم NaN، فكيف أفعل الشيء نفسه في MATLAB؟

بالإضافة إلى ذلك، أنا أكتب ملفًا باستخدام xlswrite:

xlswrite('test.xls',M);

لدي بيانات في جميع الصفوف باستثناء 1.كيف أكتب:

M(1,:) = ('time', 'count', 'length', 'width')

وبعبارة أخرى، أريد M(1,1)='time', M(1,2)='count', ، وما إلى ذلك وهلم جرا.لدي بيانات من M(2,1) ل M(10,20).كيف يمكنني أن أفعل هذا؟

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

المحلول

استخدم الدالة 'isfinite' للتخلص من جميع NaN واللانهاية

أ=أ(غير محدود(أ))

٪ قم بإنشاء صفيف الخلية الذي يحتوي على رؤوس العمود ColumnHeader = {'' العمود 1 '،' العمود 2 '،' العمود 3 '،' العمود 4 '،' العمود 5 '،'} ؛

٪ اكتب رؤوس الأعمدة الأولى xlswrite ('myfile1.xls' ، columnheader) ؛

٪ اكتب البيانات مباشرة أسفل رؤوس الأعمدة xlswrite ('newfile.xls' ، m ، 'sheet1' ، 'a2') ؛

نصائح أخرى

كما تشير AP بشكل صحيح, ، يمكنك استخدام الوظيفة isfinite للعثور على القيم المحدودة فقط في المصفوفة الخاصة بك والاحتفاظ بها.يمكنك أيضًا استخدام الوظيفة isnan.ومع ذلك، فإن إزالة القيم من المصفوفة يمكن أن يكون لها نتيجة غير مقصودة تتمثل في إعادة تشكيل المصفوفة إلى متجه صف أو عمود:

>> mat = [1 2 3; 4 NaN 6; 7 8 9]  % A sample 3-by-3 matrix

mat =

     1     2     3
     4   NaN     6
     7     8     9

>> mat = mat(~isnan(mat))  % Removing the NaN gives you an 8-by-1 vector

mat =

     1
     4
     7
     2
     8
     3
     6
     9

البديل الآخر هو استخدام بعض الوظائف من صندوق أدوات الإحصائيات (إذا كان لديك حق الوصول إليه) المصممة لذلك التعامل مع المصفوفات التي تحتوي على قيم NaN.وبما أنك ذكرت أخذ المتوسطات، فقد ترغب في التحقق من ذلك nanmean:

>> mat = [1 2 3; 4 NaN 6; 7 8 9];
>> nanmean(mat)

ans =

     4     5     6     % The column means computed by ignoring NaN values



يحرر: للإجابة على سؤالك الإضافي حول استخدام xlswrite, ، يجب أن يوضح نموذج التعليمات البرمجية هذا إحدى الطرق التي يمكنك من خلالها كتابة بياناتك:

C = {'time','count','length','width'};  % A cell array of strings
M = rand(10,20);                        % A 10-by-20 array of random values
xlswrite('test.xls',C);           % Writes C to cells A1 through D1
xlswrite('test.xls',M,'A2:T11');  % Writes M to cells A2 through T11

يحتوي صندوق أدوات الإحصائيات على العديد من الوظائف الإحصائية للتعامل مع قيم NaN.انظر nanmean، nanmedian، nanstd، nanmin، nanmax، إلخ.

يمكنك ضبط NaN على رقم عشوائي مثل:

mat(isnan(mat))=7 // my lucky number of choice. 

ربما فات الأوان، ولكن...

x = [1 2 3; 4 inf 6; 7 -inf NaN];
x(find(x == inf)) = 0; //for inf
x(find(x == -inf)) = 0; //for -inf
x(find(isnan(x))) = 0; //for NaN
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top