سؤال

لدي مصفوفان في ماتلاب دعونا نقول arr1 و arr2 من الحجم 1000 * 1000 لكل منهما. أريد مقارنة عناصرها وحفظ المقارنة في مصفوفة النتيجة resarr وهو أيضا 1000 * 1000 مثل هذا العنصر:

  • إذا كان العنصر في arr1 أكبر من واحد في arr2, وضع القيمة 1 في النتيجة
  • إذا كان العنصر في arr2 أكبر، تخزن القيمة 2

لكنني لا أريد أن أفعل هذا مع حلقات لأن هذا أبطأ. كيف يمكنني أن أفعل هذا؟


تعديل:أيضا إذا أردت تخزين قيم RGB المختلفة في مصفوفة نتيجة 1000 * 1000 * 3، اعتمادا على مقارنة arr1 و arr2, ، يمكن القيام بذلك دون حلقات بطيئة؟

على سبيل المثال تخزين (255،0،0) إذا arr1 أكبر و (0،255،0) إذا arr2 أكبر

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

المحلول

resarr = 2 - (arr1 > arr2)

arr1>arr2 يقارن ARR1 و ARR2، عنصر حسب العنصر، وعودة 1000x1000 مصفوفة تحتوي على 1 حيث Arr1 أكبر، و 0 خلاف ذلك. ال 2 - الجزء يجعله في مصفوفة حيث يوجد 1 إذا كان Arr1 أكبر من ARR2، و 2 غير خلاف ذلك.

ملاحظة: إذا كانت ARR1 و ARR2 هي euqal في مرحلة ما، فستحصل أيضا على 2 (بسبب ترخيص Arr1> Arr2 Return 0، ثم 2-0 = 2).

نصائح أخرى

فيما يتعلق بالتعديل الخاص بك، بمجرد أن يكون لديك resarr مصفوفة محسوبة ك ofri. اقترح، يمكنك تعديل مصفوفة RGB img بالطريقة الآتية:

N = numel(resarr);  %# The number of image pixels

index = find(resarr == 1);  %# The indices where arr1 is bigger
img(index) = 255;           %# Change the red values
img(index+N) = 0;           %# Change the green values
img(index+2*N) = 0;         %# Change the blue values

index = find(resarr == 2);  %# The indices where arr2 is bigger
img(index) = 0;             %# Change the red values
img(index+N) = 255;         %# Change the green values
img(index+2*N) = 0;         %# Change the blue values
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top