/ / Utwórz tablicę z innej i znajdź indeksy Matlab [zamknięte] - matlab

Utwórz tablicę od innej i znajdź indeksy Matlab [closed] - matlab

Mam tablicę ze zmiennymi takimi jak S, SV, Vitd. Chcę utworzyć nową tablicę tylko za pomocą V zmienna, więc na przykład:

V

SV

S

V

staje się

V

V

Po tym muszę znać indeksy, gdzie każdy z nich V znaleziono zmienne, w tym przypadku indeksy 1 i 4.

P.S Próbowałem już używać if w for loop:

for i=1:744;
if most_common_string{i} == "V"
periodo=most_common_string{i};
end
end

ale nie otrzymuję tablicy ze wszystkimi V„s. W rzeczywistości otrzymuję tylko komórkę.

Próbowałem również find funkcja, aby uzyskać indeksy, ale nie działa.

Odpowiedzi:

1 dla odpowiedzi № 1

Nie potrzebujesz do tego drugiej macierzy, możesz użyć cellfun. Ponadto, aby porównać użycie ciągów strcmp, nie == (to prawdopodobnie dlatego twój kod nie działa):

>> array = {"V";"SV";"S";"V"};
>> ind = cellfun(@(s) strcmp(s,"V"), array)

ind =

1
0
0
1

>> find(ind)

ans =

1
4

1 dla odpowiedzi nr 2

Jednym ze sposobów na to jest naprawienie for pętla. Problem polega na tym, że zawsze przypisujesz wartość do tej samej zmiennej. Niewiele do zyskania. Musisz dodać do tablicy:

result = {};
indices = [];
for i=1:numel(most_common_string)
if most_common_string{i} == "V"
indices = [indices;i];
result = [result;most_common_string(i)];
end
end

Zauważ, że Code Analyzer może narzekać na zmiany rozmiaru macierzy podczas iteracji pętli. Nie możesz tego naprawdę uniknąć, ponieważ nie możesz określić, jaki rozmiar będzie posiadał zestaw.

find prawdopodobnie nie działa tak, jak tego oczekujesz, ponieważ nie nadaje się do użycia z tablicami komórek.