Ich habe eine symmetrische Matrix von einigen statistischen Werten, die ich mit Hilfe von imagesc in Matlab plotten möchte. Die Größe der Matrix ist 112 X 28, was bedeutet, dass ich für jede Spalte 4 Zeilen anzeigen möchte. Wie kann ich den oberen oder unteren dreieckigen Teil dieser Matrix loswerden? Da dies das Löschen von 4 Zeilen pro Spalte diagonal Tril oder Triu-Funktionen bedeutet, funktioniert nicht (sie sind für quadratische Matrizen). DankBeseitigung der oberen oder unteren dreieckigen Teil einer symmetrischen Matrix
Antwort
Wenn Sie das Image Processing Toolbox haben könnten Sie imresize
verwenden, um eine obere Dreiecksmaske, um die Größe, die Sie dann
msk = imresize(triu(true(min(size(a)))), size(a), 'nearest');
% Just zero-out the lower diag
zeroed = msk .* a;
% Select the elements in the upper diagonal
upperdiag = a(msk);
die entsprechenden Daten verwenden, um auszuwählen Wenn Sie die Image Processing Toolbox nicht haben (und imresize
) Sie können wie etwas tun
msk = reshape(repmat(permute(triu(true(min(size(a)))), [3 1 2]), size(a,1)/size(a,2), 1), size(a));
Sie kron
Funktion
kron(triu(ones(28)),[1 ;1 ;1 ;1])
kam ich mit einer Lösung oben mit meshgrid
Definieren Sie zunächst ein Raster, das alle Indizes Ihrer Matrix deckt
[X, Y] = meshgrid([1:28], [1:112]);
Sie möchten alle Werte maskieren oben (oder unten) die Diagonale 4x = y. Definieren Sie einfach die Maske als Funktion Ihrer X- und Y-Werte.
mask = 4.*X >= Y; %>= Selects above the diagonal, <= selects below the diagonal
Hier ist die Maske. Beachten Sie, dass die Achsen nicht symmetrisch sind.
können Sie diese Methode verwenden, um alle Trennlinie oder eine Funktion auf dem Gitter zu definieren. Man könnte sogar eine Parabel
mask_parabola = (X-14).^2 >= Y;
Es gibt nette Antworten tun, aber vielleicht kann man dieses eine Alternative mit triu Funktion sein:
% image
img = rand(112, 28);
% utilize a square matrix to use triu command
temp = nan(112, 112);
temp(:, 1:4:end) = img;
temp = triu(temp, -3);
% put the relevant elements back
img = temp(:, 1:4:end);
Sie die Maske mit bsxfun
erstellen kann wie folgt :
M = 112; % number of rows
N = 28; % number of columns
mask = bsxfun(@le, (1:M).', (1:N)*round(M/N)); % create mask
data = data.*mask; % multiply your data matrix by the mask
- 1. Armadillo C++: Gibt es eine spezielle Möglichkeit zum Erstellen effizient dreieckigen oder symmetrischen Matrix
- 2. Konvertiere den streng oberen dreieckigen Teil einer Matrix in ein Array in Tensorflow
- 3. Suche nur einen Teil einer Matrix in Python
- 4. Eigen: Wie berechnet man nur den unteren/oberen Teil in der Matrix Inner Produkt
- 5. Verarbeitung von oberen dreieckigen Elementen nur mit NumPy einsum
- 6. Verschiedene Daten im oberen und unteren Bereich der Streudiagramm-Matrix
- 7. Erstellen einer symmetrischen Matrix in R
- 8. Plotten nur des oberen/unteren Dreiecks einer Heatmap
- 9. Entfernen der oberen/unteren Spiegelung von UIWebView?
- 10. Algorithmus für Indexzahlen von dreieckigen Matrix-Koeffizienten
- 11. Matrixmanipulation zur Berechnung des Mindestwerts der oberen und unteren Dreiecksmatrix
- 12. Gründe, warum das Multiplizieren einer symmetrischen Matrix mit einer diagonalen Matrix eine unsymmetrische Matrix ergibt
- 13. Numpige Matrixmultiplikation der LDL^T-Faktorisierung der symmetrischen Matrix
- 14. Matlab: Berechnen Sie die Summe der Elemente im unteren Teil einer Matrix
- 15. Effizienter Algorithmus für Determinante einer m-diagonalen NxN symmetrischen Matrix
- 16. Wie die Größe der oberen div nach der unteren div
- 17. Generics - Verhalten der unteren/oberen Grenze der Wildcard?
- 18. Extract jeweiligen oberen und unteren Dreiecks Elemente der Matrix in R
- 19. Wie Anzeige Yii2 Paginierung in GridView Widget auf und oberen und unteren Teil der Tabelle?
- 20. Effizienter Weg, um den Index des oberen oberen dreieckigen Eintrags in einem numpligen Array zu finden?
- 21. Position MBProgressHUD am unteren/oberen Bildschirmrand
- 22. C++ - Kreisförmiges Array mit unteren/oberen Grenzen?
- 23. Gibt es eine einfache Möglichkeit, eine dreieckige (obere oder untere) Matrix umzukehren?
- 24. Erstellen einer diagonalen Matrix aus einer Hälfte der Matrix
- 25. JApplets: Entfernen von oberen und unteren Bänder
- 26. cumsum mit oberen und unteren Grenzen?
- 27. Aktualisieren unteren und oberen Grenzen in PostgreSQL
- 28. Matlab: Wählen Sie einen Teil einer Matrix
- 29. Android Optionsmenü oberen und unteren Rand
- 30. Setzen der unteren und oberen Grenzen auf numpy.random.exponential
Ja ich habe die Image Processing Toolbox und ich habe was ich will von imagesc (zeroed) Vielen Dank! –