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

(logische) Adressierung von Matritzen

 

Evron
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 22.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2009, 17:20     Titel: (logische) Adressierung von Matritzen
  Antworten mit Zitat      
Hallo,

an dieser Stelle zwei Fragen auf einmal. Zum ersten, ist es möglich bei der logischen Adressierung in Matritzen mit dem Vergleich von Vektoren zu arbeiten, also so etwas in der Art wie:
Code:

a=1:5;
b=[1:5; 6:10; 11:15];
b(b==a, :)=0;
 

Der Code sollte also so etwas machen, dass er in b die Zeile auf 0 setzt, welche a entspricht.

Zum zweiten, wenn man beispielsweise einen Vektor hat mit belibigen werten und möchte genau wissen das wievielte Element dem Wert entspricht, gibt es da auch eine Möglichkeit? Bei der logischen Adressierung mittels
Code:

c(c(:)==Wert)
 

kann man zwar auf das Element zugreifen, weis aber immer noch nicht wo es steht.
Private Nachricht senden Benutzer-Profile anzeigen


Jan*
Forum-Century

Forum-Century


Beiträge: 178
Anmeldedatum: 06.11.09
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 30.11.2009, 17:24     Titel:
  Antworten mit Zitat      
Zu 1.) Ich kann mir nicht vorstellen, dass das geht, weil die Vergleichsoperatoren für Matrizen unterschiedlicher Größe nicht definiert sind. Ich lasse mich hier aber gerne eines besseren belehren.

Zu 2.) dafür gibt es den 'find' Befehl

Code:
Private Nachricht senden Benutzer-Profile anzeigen
 
Evron
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 22.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2009, 17:45     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank für den Hinweis auf find(), das wäre damit geklärt. Bleibt die Frage offen gibt es eine andere effiziente Möglichkeit in einer Matrix diejenigen Zeilen zu finden, welche einem vorgegebenen Zeilenvektor entsprechen (Anzahl der Spalten in beiden, Matrix und Vektor stimmen überein)?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.11.2009, 18:00     Titel:
  Antworten mit Zitat      
Hallo,

zu 1.:
Code:
indices = arrayfun(@(I) isequal(b(I, :), a), 1:size(b, 1));
b(indices , :)=0;


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan*
Forum-Century

Forum-Century


Beiträge: 178
Anmeldedatum: 06.11.09
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 30.11.2009, 18:01     Titel:
  Antworten mit Zitat      
Eine effiziente Möglichkeit kenne ich auch nicht, ich würde mit einer for-Schleife über die Matrix laufen, und mit isequal vergleichen. Das wäre natürlich elendig langsam. Vielleicht hat ja jemand eine elegantere Idee?!
Private Nachricht senden Benutzer-Profile anzeigen
 
Evron
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 22.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2009, 17:31     Titel:
  Antworten mit Zitat      
I'm impressed. Ich hätte es nicht gedacht, aber die arrayfun scheint um Welten schneller als eine for-Schleife zu sein. Danke Harald!
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.