Matlab - Usuwanie z macierzy elementów zawartych w wektorze

0

Witam

Mam pytanie, jak w możliwie najprostszy sposób usunąc wiersze z macierzy, które zawierają liczby z wektora (kolumny).

Mam dwie zmienne:

Ind - macierz o 3 kolumnach i kilkuset tysięcach wierszy
ndelind - wektor (kolumne, kilkanaście tysięcy wierszy) z liczbami które również pojawiają się w pierwszej kolumnie w macierzy Ind.

Cały problem polega na tym jak usunąć ze zmiennej "Ind" te wiersze które zawierają liczby z zmiennej "ndelind". Ułatwieniem może być to ze te wartości w Ind są jedynie w pierwszej kolumnie.

Podsumowując chciałbym mieć nową zmienną "Ind" tylko bez tych wierszy, w których są wartości zawarte w "ndelind".

Na załączonym na dole zdjęciu jest wyjaśnione o co chodzi.
Bardzo proszę jeżeli to możliwe o konretną komendę do danych zmiennych. Zapewne trzeba użyć pętli.
Za każdą pomoc będę niezmiernie wdzięczny, jest to bardzo ważne dla mnie.

Pozdrawiam serdecznie!

1

Czy macierz ndelind jest posortowana?

Tak na szybko, nie testowane:

Ind2 = [] % nasza macierrz wyjsciowa
is_there = ismember(ndelind,Ind(:,1)) % zwraca gdzie w Ind wystepuja wartosci z ndelind
j = 1
for i = 1:size(Ind,1)
    if not (is_there(i))
        Ind2(j) = Ind(i)
        j = j+1
    end
end

Nie jest to optymalne, ale nic innego nie napiszę bez matlaba pod ręką.

0

Dziękuje bardzo za odpowiedz jednak ten skrypt nie działa :(

ndelind jest wektorem, 1 kolumna, i jest posortowany (na zdjęciu dla potwierdzenia widać).
Po pierwsze skrypt w miejscu:
is_there = ismember(ndelind,Ind(:,1))
Generuje wektor w postaci kolumny jedynek równej długości zmiennej ndelind.

Natomiast po przepuszczeniu całego skryptu, również błąd się pojawia w pętli tj:

Attempted to access is_there(14936);
index out of bounds because
numel(is_there)=14935.

Zapewne wychodzi poza macierz pętla.
Tak jak podkreślałem, wartości z ndelind występują wyłącznie w 1 kolumnie w zmiennej (macierzy) Ind.
Masz może jeszcze jakieś pomysły jak to rozwiązać? Bardzo mi to pomoże.

Pozdrawiam serdecznie!

1

spróbuj
Ind(sum(ismember(Ind, ndelind), 2) == 0,:)

0

Znalazłem rozwiązanie! :)

Ind(find(ismember(Ind(:,1),ndelind)),:)=[]

Temat do zamknięcia :)
Dziękuje za pomoc i chęci!

1 użytkowników online, w tym zalogowanych: 0, gości: 1