كيف يمكنني حذف تقاطع المجموعات A و B من A دون فرز في Matlab؟
-
28-09-2019 - |
سؤال
مصفوفين ، أ و ب:
A = [1 2 3
9 7 5
4 9 4
1 4 7]
B = [1 2 3
1 4 7]
جميع صفوف المصفوفة B هي أعضاء في Matrix A. أود حذف الصفوف المشتركة لـ A و B من A بدون فرز.
لقد جربت setDiff () ولكن هذا النوع من الإخراج.
بالنسبة لمشكلتي الخاصة (الإحداثيات الذرية في هياكل البروتين) ، فإن الحفاظ على السلامة المطلوبة للصفوف أمر مهم.
المحلول
يستخدم إيمبور:
%# find rows in A that are also in B
commonRows = ismember(A,B,'rows');
%# remove those rows
A(commonRows,:) = [];
نصائح أخرى
اضطررت إلى إنشاء فرق بين صفيفتين دون فرز البيانات. لقد وجدت هذا الخيار الرائع في مستندات MATLAB. وظيفة setDiff
هنا تعريف الوظيفة [C,ia] = setdiff(___,setOrder)
إذا كنت لا تريد فرز بيانات الإخراج ، فاستخدم "مستقر" وإلا "فرز" أو بدون معلمة.
هنا كانت حالة الاستخدام الخاصة بي.
yDataSent = setdiff(ScopeDataY, yDataBefore, 'stable')
yDataBefore = ScopeDataY;
لا تنتمي إلى StackOverflow