Mam tablicę komórek o długości 3 i chcę zrobić for
zapętlić z inną tablicą komórek o długości 6
, więc jak mogę dodać dodatkowe 3 komórki dla pierwszej tablicy, aby dwie tablice komórek były równe i aby użyć mojej for
pętla w programie MATLAB?
Na przykład z 2 wejściami:
type = { "12" "62" "5" };
colour = {"re" "green" "yellow" "brown" "blue" "black"};
for i = 1:length(colour)
if isequal(colour(i), type(:))
result(i) = type(i);
else
end
end
Muszę zrobić type
tablica komórek o tym samym rozmiarze colour
tablica komórek (myślę, że muszę dodać dodatkowe 3 puste komórki po stronie type
tablica komórek).
Odpowiedzi:
2 dla odpowiedzi № 1Najpierw muszę rozwiązać kilka problemów w kodzie:
Jeśli używasz tablicy komórek, musisz użyć nawiasów klamrowych (
{}
) wyodrębnić z niego elementy. Zamiast pisaćcolour(i)
powinieneś pisaćcolour{i}
.To nie jest problem, ale jest to kwestia dobrej praktyki. Jeśli nie potrzebujesz obsługiwać
else
częśćif
oświadczenie, w ogóle go nie pisz.Prealokuj pamięć, aby tablice nie rosły w pętli (spowalnia to program), w szczególności dodaj linię
result = cell(size(colour));
przedfor
pętla.Twój
isequal
logika jest błędna. Praktycznie zawsze wrócifalse
bocolour{1}
jest jednym elementem itype{:}
jest wiele.Według twojego przykładu,
types
zawierają liczby icolours
litery, chociaż oba są łańcuchami. Czy ma sens porównanie tych dwóch?
Teraz, jeśli chodzi o twoje pytanie, to od Ciebie zależy, w jaki sposób for
działa pętla. Ponieważ nie wspominasz o tym, co chcesz osiągnąć (raczej pytasz, jak chcesz coś osiągnąć, nie mówiąc co dokładnie), nie mogę powiedzieć, co masz for
pętla powinna wyglądać, jeśli to konieczne, w ogóle. Może chciałeś użyć ismember
zamiast isequal
? Jeśli tak, ustalony kod może wyglądać tak:
result = cell(size(colour));
for i = 1:length(colour)
if ismember(colour{i}, type)
result{i} = type{i};
end
end
lub krótszy, jak ten:
result = cell(size(colour));
[found, idx] = ismember(colour, type);
result(found) = type{idx(found)}
Jeśli podasz więcej szczegółów, być może uda mi się uściślić moją odpowiedź, aby była bardziej pomocna.