ماتلاب: مقارنة جميع عناصر صفيفين
-
18-09-2019 - |
سؤال
لدي مصفوفان في ماتلاب دعونا نقول 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