Pracuję z systemem pobierania obrazu, używając przecięcia histogramu w MATLAB. Ta metoda daje mi następujące dane: rzeczywistą liczbę reprezentującą odległość przecięcia histogramu i nazwę pliku obrazu. Ponieważ są to różne typy danych, przechowuję je w tablicy struktury z dwoma polami, a następnie zapisuję tę strukturę w pliku .mat. Teraz muszę posortować tę strukturę zgodnie z odległością przecięcia histogramu w porządku malejącym, aby uzyskać obraz o najwyższej odległości przecięcia histogramu. Próbowałem wielu metod sortowania tych danych, ale bez wyniku. Czy możesz pomóc mi rozwiązać ten problem?Jak sortować tablice struktur w programie MATLAB?
Odpowiedz
Oto jeden z przykładów, jak można to zrobić, korzystając z funkcji MAX zamiast sortowania:
%# First, create a sample structure array:
s = struct('value',{1 7 4},'file',{'img1.jpg' 'img2.jpg' 'img3.jpg'});
%# Next concatenate the "value" fields and find the index of the maximum value:
[maxValue,index] = max([s.value]);
%# Finally, get the file corresponding to the maximum value:
maxFile = s(index).file;
EDIT: Jeśli chcieliby Państwo uzyskać N najwyższe wartości, a nie tylko maksymalnie, możesz użyć SORT zamiast MAX (as Shaka suggested). Na przykład (przy użyciu powyższej struktury):
>> N = 2; %# Get two highest values
>> [values,index] = sort([s.value],'descend'); %# Sort all values, largest first
>> topNFiles = {s(index(1:N)).file} %# Get N files with the largest values
topNFiles =
'img2.jpg' 'img3.jpg'
Istnieje również możliwość sortowania całej struktury.
Aby zbudować off przykład gnovice za ...
% Create a structure array
s = struct('value',{1 7 4},'file',{'img1.jpg' 'img2.jpg' 'img3.jpg'});
% Sort the structure according to values in descending order
% We are only interested in the second output from the sort command
[blah, order] = sort([s(:).value],'descend');
% Save the sorted output
sortedStruct = s(order);
Uwaga: aby posortować według nazwa pliku (lub dowolny ciąg), zrobiłbyś '[~, order] = sort ({s. file});', następnie 'sortedStruct = s (order);'. W takim przypadku nie można użyć '' descend'', dopóki nie zostanie to zaimplementowane w jakiejś przyszłej wersji Matlaba. –
- 1. sortować tablice double w C
- 2. Wydajne indeksowanie struktur w MATLAB
- 3. Jak sortować tablicę struktur według wielu wartości?
- 4. Matrix w programie MATLAB
- 5. Usuwanie elementów z tablicy struktur w Matlab
- 6. Indeksowanie macierzy 2D w programie Matlab
- 7. Opis funkcji regresji w programie Matlab
- 8. Wykrywanie siatki w programie Matlab
- 9. Jak wykreślić płaszczyznę 3D w programie Matlab?
- 10. jak ocenić pochodną funkcji w programie Matlab?
- 11. Jak rozpoznać błędy przepełnienia w programie Matlab?
- 12. Jak utworzyć wykres logu w programie Matlab
- 13. Jak wywołać funkcję Mathematica w programie Matlab?
- 14. W programie Matlab, jak zmienić orientację osi?
- 15. Jak zastąpić domyślny tekst w programie MATLAB
- 16. Czy można sortować tablice za pomocą preprocesora?
- 17. Jak sortować dwie tablice według tego samego indeksu?
- 18. Gładkie wydruki kolorów w programie Matlab
- 19. Generowanie informacji o wersji w programie Matlab (Matlab Compiler)
- 20. Działka wewnątrz pętli w programie MATLAB
- 21. Odczyt z pliku CSV w programie MATLAB
- 22. Prealokacja macierzy komórek w programie matlab
- 23. Populacja czasu kompilacji struktur danych innych niż tablice?
- 24. Uszereguj wartości tablicowe do pojedynczego pola tablicy struktur (w Matlab)
- 25. Utwórz przezroczysty piksel w programie Matlab
- 26. Co robią przecinki końcowe w programie Matlab?
- 27. Obliczanie macierzy kowariancji w programie Matlab
- 28. Jak rozpoznać łamanie punktów w tablicy numerycznej w programie MATLAB
- 29. jak usunąć elementy przekątnej macierzy w programie MATLAB?
- 30. Jak przypisać wartość do określonych lokalizacji macierzy w programie MATLAB?
można również użyć ** cat (1, s.value) ** Łączenie wartości – Amro
bardzo dziękuję za odpowiedź, postaram korzystać z tej funkcji. Proszę, czy mogę uzyskać twój adres e-mail, aby przesłać mój mój kodek matlab dzięki –
@zenab: Mój adres e-mail jest w moim profilu. Nie krępuj się napisz do mnie, jeśli masz coś, co chcesz omówić bezpośrednio. – gnovice