Mam tablicę ze zmiennymi takimi jak S
, SV
, V
itd. 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 № 1Nie 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.