كيف يمكنني حذف تقاطع المجموعات A و B من A دون فرز في Matlab؟

StackOverflow https://stackoverflow.com/questions/3467670

  •  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;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top