WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Cell-Array extrahieren

 

agent_fux
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 12.01.17
Wohnort: ---
Version: MATLAB R2016b student use
     Beitrag Verfasst am: 23.01.2017, 11:23     Titel:
  Antworten mit Zitat      
Hallo ich versuche auch mit dem Code von Harald die gesamte Zeile ausgeben zu lassen. Aber ich habe nur Zahlen in meinen Array. Leider klappt die Funktion
Code:
t= maxNOxbyleikla(2,1)

idx = (cell2mat(C(:,27)) == t);
Zeilen = C(idx,:)
nicht und ich erhalte dieses Fehlermeldung:

Code:
Cell contents reference from a non-cell array object.

Error in cell2mat (line 42)
cellclass = class(c{1})


Wie funktioniert es richtig?
Private Nachricht senden Benutzer-Profile anzeigen
Gesplittet: 23.01.2017, 11:38 Uhr von Jan S
Von Beitrag Komplette Zeilen aus einem Cell-Array extrahieren aus dem Forum Programmierung


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.01.2017, 11:46     Titel:
  Antworten mit Zitat      
Hallo agent_fux,

Bitte hänge eine neue Frage nicht an einen bestehenden Thread an. Danke!

Die Fehlermeldung klingt eindeutig: Das Argument von cell2mat ist kein Cell-Array. Was ist also "C(:,27)"?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
agent_fux
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 12.01.17
Wohnort: ---
Version: MATLAB R2016b student use
     Beitrag Verfasst am: 23.01.2017, 12:27     Titel:
  Antworten mit Zitat      
C ist meine Matrix der Dimension 5427x43 double. Und es soll mir die gesamte Zeile ausgegeben werden, wenn der Wert in Spalte 27 mit einem vorgegebenen Wert übereinstimmt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.01.2017, 13:59     Titel:
  Antworten mit Zitat      
Hallo agent_fux,

Wenn C eine DOUBLE Matrix ist, kannst Du cell2mat einfach weglassen, denn dieser Befehl wandelt ein Cell-Array in eine Matrix um. Mangels Cell-Type ist eine solche Umwandlung aber weder möglich nocht nötig.

Code:
idx = (cell2mat(C(:,27)) == t)

Dies ist jetzt noch ein Logical Vektor. Wenn Du die ganze Spalte haben möchtest, brauchst Du wahrscheinlich noch ein any oder all .

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
agent_fux
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 12.01.17
Wohnort: ---
Version: MATLAB R2016b student use
     Beitrag Verfasst am: 23.01.2017, 15:27     Titel:
  Antworten mit Zitat      
any oder all liefert mir nur die logischen Werte 0 oder 1.

Mittlerweile habe ich eine Lösung gefunden: Ich suche den Wert in der Spalte mit find und lasse mir die Koordinaten ausgeben.

Code:
z = find(C(:,28) == t)

K = C(z,:)


So bekomme ich die gesamte gesuchte Zeile extrahiert.
Private Nachricht senden Benutzer-Profile anzeigen
 
agent_fux
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 12.01.17
Wohnort: ---
Version: MATLAB R2016b student use
     Beitrag Verfasst am: 23.01.2017, 16:35     Titel:
  Antworten mit Zitat      
Jetzt möchte ich das ganze erweitern. Und zwar sollen gleich mehrere Zeilen auf einmal extrahiert werden.

Zunächst suche ich nach den Zeilenindizes meiner Matrix C.

Dazu habe ich einen Spaltenvektor z = [1;2;3;4;5], der die Werte enthält, nach denen in meiner Matrix in Spalte 28 gesucht werden soll.
Code:
for i = 1:(size(z,1))
   r= find(C(i,28) == z(i,1))
   end

Hier bekomme ich als Ergebnis einen Spaltenvektor mit 5 leeren Zeilen. Warum?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 24.01.2017, 11:58     Titel:
  Antworten mit Zitat      
Hallo agent_fux,

In
Code:
z = find(C(:,28) == t)
K = C(z,:)

kann man das find weglassen. Das heißt dann "logical indexing" und es läuft schneller. Ein entsrpechender Hinweis sollte im Editor angezeigt werden.

Zitat:
Ergebnis einen Spaltenvektor mit 5 leeren Zeilen

Was genau bezeichnest Du hier als "Ergebnis"? Wie kann ein Spaltenvektor 5 leere Zeilen enthalten?
In der Schleife aus Deinem letzten Post wird der Inhalt von "r" in jeder Iteration überschrieben. Das ist bestimmt nicht gewollt.
Die Schleife läuft über die 5 Elemente von z, "C(i, 28)" ist dann nicht die ganze Spalte, sondern auch nur die ersten 5 Elemente.

Wie wäre dies:
Code:
z = [1;2;3;4;5];
match = ismember(C(:, 28), z);
Result = C(match, :);

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
agent_fux
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 12.01.17
Wohnort: ---
Version: MATLAB R2016b student use
     Beitrag Verfasst am: 24.01.2017, 13:04     Titel:
  Antworten mit Zitat      
Cool, Dein Code funktioniert so, wie es sein soll. Danke! Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.