/ / Normalizuj długość tablicy komórek - matlab, tablica komórek

Normalizuj długość tablicy komórek - matlab, tablica komórek

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 № 1

Najpierw muszę rozwiązać kilka problemów w kodzie:

  1. 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}.

  2. 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.

  3. Prealokuj pamięć, aby tablice nie rosły w pętli (spowalnia to program), w szczególności dodaj linię result = cell(size(colour)); przed for pętla.

  4. Twój isequal logika jest błędna. Praktycznie zawsze wróci false bo colour{1} jest jednym elementem i type{:} jest wiele.

  5. Według twojego przykładu, types zawierają liczby i colours 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.