سؤال

أنا أقوم باختبار مجموعة كبيرة الحجم بشكل تعسفي من العناصر المنطقية، وأود معرفة ما إذا كان أي واحد أو أكثر منهم صحيح. any() يعمل فقط على بعد واحد في كل مرة، كما يفعل sum().أعلم أنه يمكنني اختبار عدد الأبعاد والتكرار any() حتى أحصل على إجابة واحدة، لكني أرغب في اتباع نهج أسرع، وبصراحة، أكثر أناقة.

أفكار؟

أنا أقوم بتشغيل 2009a (R17، في اللغة القديمة، على ما أعتقد).

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

المحلول

إذا كانت بياناتك في مصفوفة أ, ، جرب هذا:

anyAreTrue = any(A(:));

يحرر: ولتوضيح أكثر لأي شخص ليس على دراية ببناء الجملة، أ(:) يستخدم عامل القولون لأخذ محتويات المصفوفة بالكامل أ, ، بغض النظر عن الأبعاد، وإعادة تشكيلها في متجه عمود واحد (بحجم numel(A)-by-1).مكالمة واحدة فقط ل أي هناك حاجة للعمل على ناقل العمود الناتج.

نصائح أخرى

وكما أشار، والحل الصحيح هو إعادة تشكيل النتيجة في ناقلات. ثم أي سيعطي النتيجة المرجوة. وهكذا،

وأي (A (:))

ويعطي نتيجة العالمية، صحيح إذا كانت أي من numel (A) العناصر الحقيقية. هل يمكن أن يكون أيضا تستخدم

وأي (إعادة تشكيل (A، []، 1))

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

و======================

ونتيجة وظيفة = myany (A)

و٪ يحدد إذا كان أي عنصر على الإطلاق في A غير الصفر

والنتيجة = أي (A (:))؛

و======================

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

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