Say mam matrycę A
z 2 kolumny - kolumna 1 zawiera Item ID i kolumna 2 zawiera jego waga:Czy istnieje jedna liniówka, która pozwala znaleźć minimum unikatowych jednostek z macierzy wielu wystąpień każdego elementu?
A = [
3 5
2 3
2 5
1 4
3 4
2 6
1 9
3 2 ];
Chcę wyjście następująco:
items = [
1 4
2 3
3 2];
Kodeksu chciałbym napisać w tym celu będzie:
items(:,1)=unique(A(:,1));
for i=1:size(items,1)
temp=A(A(:,1)==items(i,1),:);
items(i,2)=min(temp(:,2));
end
items
matryca jest wymagane wyjście tutaj.
Zastanawiam się, czy istnieje kod jedno-liniowy, który robi to w MATLAB.
@Shai Dzięki za rozwiązanie. Twój kod jest natychmiast wykonywany, a moje wykonanie zajmuje około minuty. Czy wiesz, dlaczego istnieje tak duża różnica czasu? – Kristada673
używasz 'unique', który sortuje tablicę - zajmuje O (nlogn). Następnie powtarzasz ponownie po wszystkich elementach w 'A' i dla każdej pozycji porównujesz ją z' itemami (i, 1) 'trwa to O (n^2). Używając "accumarray" uważam, że jest O (n). – Shai
@Shai 'unique' kończy się natychmiast. Jest to pętla 'for', która zabiera czas. I tak, prawdopodobnie wynika to z O (n^2) vs O (n), o którym wspomniałeś. Wciąż próbując zrozumieć twój kod, jak działa "accumarray" :-) – Kristada673