2017-08-06 12 views
1

Meine Frage sollte ziemlich einfach sein, aber ich kann es nicht zum Laufen bringen. Ich möchte aus einer Matrix nur die relevanten Zeilen mit logischen Operatoren nehmen und dann nur diese Zeilen speichern. Ich bin es gewohnt, dies mit einer for-Schleife in anderen Sprachen zu tun, aber in Matlab sollte es schneller sein, dies über das gesamte Array oder die Matrix gleichzeitig auszuführen.Matlab logische Operation auf Array

Dies ist ein Beispiel für das, was ich denke, sollte funktionieren, aber alle meine ähnlichen Versuche erzeugen verschiedene Fehler, und ich bin mir nicht sicher, was zu tun ist.

Mrelevant = Matrix(Matrix.no_refs > 100) 

Edit: Matrix ist eigentlich eine Tabelle mit Header, ich nur die Zeilen behalten möchten, die bestimmte Anforderungen erfüllen, wie der Wert in der Spalte mit Kopf ‚no_refs‘ 100. oben sein sollte

I hoffe das ist klar genug, danke!

+2

Bitte beachten Sie: [mcve] – excaza

+2

Anscheinend Matrix ist keine Matrix, sondern eine Struktur von einem Typ. Bitte fügen Sie Code hinzu, um ein Beispiel 'Matrix' zu erstellen und die Ausgabe, die Sie für diese Daten erwarten. – beaker

+0

Sehen Sie hier ein nahes Beispiel: https://stackoverflow.com/questions/45526311/find-the-largest-value-in-a-column/45526702#45526702 – EBH

Antwort

2

Nachdem Sie nun Matrix als table angegeben haben, ist die Antwort klar. Sie haben vergessen, einen zusätzlichen colon Index Argument, um alle Variablen für die angegebenen Zeilen umfassen Sie die Auswahl:

Mrelevant = Matrix(Matrix.no_refs > 100, :); 

Dies gibt Ihnen eine neue Tabelle Mrelevant, die nur die Zeilen aus Matrix enthält, wo die no_refs Variable größer als 100 ist. Unter here finden Sie alle Möglichkeiten, auf Daten in einer table Zeile und/oder Variable zuzugreifen.

0

Die Syntax, die Sie hier zeigen, sollte funktionieren, obwohl ich nicht weiß, was der Zweck der no_refs sein könnte. Die korrekte Syntax lautet:

Mrelevant = matrixName(matrixName > 100) 

Dies wird jedoch eine einzelne Spalte erstellen, die die Werte enthält, die die Bedingung erfüllen. Zum Beispiel

testMatrix = 
0.8147 0.0975 0.1576 0.1419 0.6557 
0.9058 0.2785 0.9706 0.4218 0.0357 
0.1270 0.5469 0.9572 0.9157 0.8491 
0.9134 0.9575 0.4854 0.7922 0.9340 
0.6324 0.9649 0.8003 0.9595 0.6787 

relevant = testMatrix(testMatrix > .5) 

relevant = 
0.8147 
0.9058 
0.9134 
0.6324 
0.5469 
0.9575 
0.9649 
0.9706 
0.9572 
0.8003 
0.9157 
0.7922 
0.9595 
0.6557 
0.8491 
0.9340 
0.6787 

Wenn Sie jedoch sagen

nur die relevanten Reihen von logischen Operatoren und dann speichern die Zeilen

tun Sie nur die Zeilen bedeuten, Speichern, in der alle Elemente in der Reihe die Bedingung erfüllen? In diesem Fall wäre die Syntax

Dies wird einfach alle Zeilen löschen, die Werte enthalten, die Ihre Anforderung nicht erfüllen.

+0

Ich bekomme _Matrix-Index ist außerhalb des Bereichs für das Löschen. _ Irgendeine Ahnung, warum das der Fall sein würde? –

+0

Könnte sein, weil eine bestimmte Matrix nicht korrekt gebildet wurde. Wenn Sie Ihre Befehlszeile oder Ihr Skript an den Punkt schreiben könnten, an dem der Fehler aufgetreten ist, kann ich bei der weiteren Fehlersuche helfen. –

Verwandte Themen