فرز العناصر في صناديق في Matlab
سؤال
إذا كان لدي مجموعة من البيانات y ومجموعة من الصناديق المتمركزة في x ، فيمكنني استخدام أمر HiST للعثور على عدد كل Y في كل صندوق.
N = hist(Y,X)
ما أود معرفته هو ما إذا كانت هناك وظيفة مدمجة يمكن أن تخبرني بأي صندوق يدخله ، لذلك
[N,I] = histMod(Y,X)
يعني أن y (i == 1) ستعيد كل y في bin 1 ، إلخ.
أعرف كيفية كتابة هذه الوظيفة ، لذلك أنا أتساءل فقط عما إذا كان هناك بالفعل مدمج في Matlab يقوم بذلك.
المحلول
الوظيفة ذات الصلة histc
هل هذا ، لكنه يتطلب منك تحديد حواف الحاوية بدلاً من مراكز الصندوق.
Y = rand(1, 10);
edges = .1:.1:1;
[N, I] = histc(Y, edges);
حساب الحواف بالنظر إلى Bincenters أمر سهل للغاية. في بطانة واحدة:
N = hist(Y, X);
يصبح
[Nc, Ic] = histc(Y, [-inf X(1:end-1) + diff(X)/2, inf]);
مع NC == N ، بالإضافة إلى صندوق فارغ إضافي في النهاية (بما أنني لا أفترض أي قيمة في Y Matches INF). يرى doc histc
.
نصائح أخرى
إذا كان المرء راضيًا عن استخدام حواف الصندوق بدلاً من الصناديق ،
[N,bin] = histc(y,binedges)
يعمل. AAARGH ، MATLAB تعاريف وظيفتك غير بديهية للغاية