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

Dynamische Matrizen - Zuweisen und Finden

 

KaiS
Forum-Century

Forum-Century


Beiträge: 102
Anmeldedatum: 19.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2013, 14:30     Titel: Dynamische Matrizen - Zuweisen und Finden
  Antworten mit Zitat      
Hallo zusammen,

ich habe folgende Situation:

Ich habe drei Matrizen:
Code:
A = [1 3]
B = [2]
C = [3 5]


Diese werden nun über
Code:

input_indices = [1:(length(A)+length(B)+length(C))];


zu einer Gesamtmatrix zusammengefügt, wobei nicht die Originaleinträge übernommen werden, sondern einfach basierend auf der Spaltenanzahl der drei Matrizen in der Gesamtmatrix von 1 bis zur Höchstanzahl an Spalten hochgezählt wird.

Nun folgendes Problem:
Aus einem beliebigen Grund möchte ich nun wissen, an welcher Stelle die Matrix B innerhalb der Gesamtmatrix steht. Die Lösung wäre 3, weil ja A mit zwei Spalten die Einträge "1" und "2" der Gesamtmatrix abdeckt und danach B direkt kommt.

Aber wie kann ich diesen Wert automatisch per Code herausfinden? Gerade auch wenn es z.B. kompliziertere Fälle mit mehr und spaltenreicheren Matrizen gibt.

Danke!

LG
Kai
Private Nachricht senden Benutzer-Profile anzeigen


Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 07.03.2013, 17:54     Titel:
  Antworten mit Zitat      
Hi,

Deine Gesamtmatrix ist (in meinem Verständnis) keine Gesamtmatrix. Das ist einfach ein Vektor der von 1 bis 5 läuft, weil die 3 Vektoren eben gemeinsam 5 Elemente haben. Nennen wir das besser Indexvektor oder so.

Die Gesamtmatrix ist eher
Code:
ges = [A, B, C]


So könnte man jetzt nach B in ges suchen, allerdings erhält man so keine eindeutige Lösung, wenn die 2 (=B) öfters in ges vorkommt
Code:

Mit
Code:

hat man evtl mehr Glück, weil ein mehrfaches Vorkommen von zwei aufeinander folgenden Zahlen unwahrscheinlicher sein mag. Eindeutig ist das aber auch nicht.

Du müsstest dir also (denke ich als, sagen wir, fortgeschrittener Anfänger) beim Erstellen von ges die Reihenfolge der Vektoren merken und somit wissen, dass B den Index 3 hat.

Grüße
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: 07.03.2013, 18:28     Titel: Re: Dynamische Matrizen - Zuweisen und Finden
  Antworten mit Zitat      
Hallo Kai,

Das ist nicht möglich. Der Vektor "input_indices" enthält keine relevante Information mehr. Du benötigst also einen anderen Ansatz. Es ist noch nicht klar, wie das Ergebnis aussehen soll, wenn das gesuchte Array mehr als ein Element enthält. Was wäre in Deinem Beispiel denn die Antort, wenn Du nach C suchst?

Es ist immer ungünstig, eine Menge von Daten in verschiedenen Variablen zu speichern, wenn sie inhaltlich zusammen gehören und sich die Anzahl der Variablen dynamisch ändert. Dann ist ein Cell-Array prktischer:
Code:
Data = {[1 3], [2], [3 5]};
Len = cellfun('prodofsize', Data);
index = cumsum([1, Len]);
input_indices = 1:index(end);

Jetzt steht B, also Data{2} an der Stelle index(2) im Vektor input_indices.

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

Forum-Century

Forum-Century


Beiträge: 102
Anmeldedatum: 19.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2013, 21:09     Titel:
  Antworten mit Zitat      
Hi ihr beiden,

danke schon mal für eure Antworten!

Zitat:
Was wäre in Deinem Beispiel denn die Antwort, wenn Du nach C suchst?


Dann würde ich gerne einen Vektor [4 5] bekommen. Bei A wäre es ein Vektor [1 2].

Cell-Array klingt gut! D.h. ich hätte dann folgende Idee:
Das Cell-Array würde bei meinem Bsp. wie folgt aussehen sollen:

Code:
cell_array = {[1 2] [3] [4 5]}


So könnte ich dann auch mir den passenden Vektor einfach rausziehen, indem ich davor herausfinde, welcher Index mit welcher Variable (hier die Buchstaben A,B,C) verbunden ist.

Wie könnte ich aber nun cell_array programmieren, sodass mir Matlab das o.g. Ergebnis ausgibt? Es soll ja dynamisch sein (also for-Schleife?) für den Fall, dass z.B. noch ein Vektor D und E dazukommen sollte oder doch nur zwei Vektoren A und B vorhanden sind.

Danke!
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: 08.03.2013, 10:13     Titel:
  Antworten mit Zitat      
Hallo Kai,

Mir ist noch nicht klar, wie die Verbindunbg zwischen Buchstaben (also Namen der Variablen) und den Daten dynamisch erfolgen soll. Bei 5 Variablen von A bis E ist das ja noch überschaubar, aber wenn man 1000 Variablen hat, ist das Basteln mit den Namen der Variablen nicht sinnvoll machbar.

Wie wäre dies:
Code:
cell_array = {[1 2] [3] [4 5]};
cell_name = {'A', 'B', 'C'};

Len = cellfun('prodofsize', Data);
index = cumsum([1, Len]);
input_indices = 1:index(end);

% Nun Abfrage der Daten zum Namen 'C':
match = find(strcmp(cell_name, 'C'));
result = input_indices(match):input_indices(match+1)-1;
% Möglicherweise ist dies effizienter:
result = [input_indices(match), input_indices(match+1)-1];
 

Das klappt ohne Verrenkungen auch für 10 Millionen Variablen. Man sollte also unbedingt davon absehen, in diesem Fall wirklich 10 Millionen verschiedene Variablen zu erzeugen.

Gruß, Jan
Man sollte also unbedingt
Private Nachricht senden Benutzer-Profile anzeigen
 
KaiS
Themenstarter

Forum-Century

Forum-Century


Beiträge: 102
Anmeldedatum: 19.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2013, 10:24     Titel:
  Antworten mit Zitat      
Alles klar, vielen Dank! Ich muss mir nochmal Gedanken machen, wieso der Code funktioniert, aber das war auf jeden Fall sehr hilfreich!
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.