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

Flexibles "repelem" für 3D matrix

 

Berto

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.02.2021, 10:25     Titel: Flexibles "repelem" für 3D matrix
  Antworten mit Zitat      
Hi ich möchte eine 3D Matrix umstrukturieren, jedoch scheint mein Vorhaben zu "kompliziert" zu sein, um es effizient in z.B. einer Loop zu coden. Ich habe es bisher nur manuell geschafft. Eventuell hat einer von euch eine idee? Freue mich über Vorschläge

Ich hab eine 63x2x6 Matrix (siehe anhang)

Mein Ziel ist es die Matrix folgendermaßen umzustrukturieren (und zwar nach Möglichkeit in einer loop?):

- Dritte Dimension soll bleiben (6 Iterationen behalten)
- Nun würde ich gerne für jede Iteration der dritten dimension:
- Die Werte beider Spalten für die Werte 2 - 7 der ersten Spalte 6 mal
"repelem".
- Die Werte beider Spalten für die Werte 2 - 8 der ersten Spalte 7 mal
"repelem".
- Die Werte beider Spalten für die Werte 3 - 9 der ersten Spalte 7 mal
"repelem".
- Die Werte beider Spalten für die Werte 4 - 10 der ersten Spalte 7 mal
"repelem".
- Die Werte beider Spalten für die Werte 5 - 10 der ersten Spalte 6 mal
"repelem".

Und all diese "repelemns" untereinander schreiben für jede Iteration auf der dritten Spalte.

Wie gesagt manuell klappt das aber es ist sehr aufwendig, freue mich über feedback von euch Grüße Berto

Matrix.mat
 Beschreibung:

Download
 Dateiname:  Matrix.mat
 Dateigröße:  670 Bytes
 Heruntergeladen:  113 mal
Matrix.mat
 Beschreibung:

Download
 Dateiname:  Matrix.mat
 Dateigröße:  670 Bytes
 Heruntergeladen:  120 mal


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 17.02.2021, 10:48     Titel:
  Antworten mit Zitat      
Kannst du bitte ein lauffähiges Minimalbeispiel erstellen?
Vor allem, ohne dass ein mat-file geladen werden muss.

Wie sieht ein (verkürztes Beispiel) aus und wie sollte es aussehen.

Was hast du bisher gemacht (das was du als "manuell" beschreibst)? Code als lauffähiges Minimalbeispiel.

Was genau meinst du mit " Dritte Dimension soll bleiben (6 Iterationen behalten)"
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Berto

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.02.2021, 10:58     Titel:
  Antworten mit Zitat      
Hi, das wäre der Output:

val(:,:,1) =
2.0000 -24.0928
2.0000 -24.0928
2.0000 -24.0928
2.0000 -24.0928
2.0000 -24.0928
3.0000 -23.8670
3.0000 -23.8670
3.0000 -23.8670
3.0000 -23.8670
3.0000 -23.8670
4.0000 -16.5275
4.0000 -16.5275
4.0000 -16.5275
4.0000 -16.5275
4.0000 -16.5275
5.0000 -7.5542
5.0000 -7.5542
5.0000 -7.5542
5.0000 -7.5542
5.0000 -7.5542
6.0000 1.4624
6.0000 1.4624
6.0000 1.4624
6.0000 1.4624
6.0000 1.4624
6.0000 1.4624
7.0000 21.0305
7.0000 21.0305
7.0000 21.0305
7.0000 21.0305
7.0000 21.0305
7.0000 21.0305



val(:,:,2) =

2.0000 -7.0003
2.0000 -7.0003
2.0000 -7.0003
2.0000 -7.0003
2.0000 -7.0003
2.0000 -7.0003
2.0000 -7.0003
3.0000 -3.6276
3.0000 -3.6276
3.0000 -3.6276
3.0000 -3.6276
3.0000 -3.6276
3.0000 -3.6276
3.0000 -3.6276
4.0000 -5.7030
4.0000 -5.7030
4.0000 -5.7030
4.0000 -5.7030
4.0000 -5.7030
4.0000 -5.7030
4.0000 -5.7030
5.0000 -4.6693
5.0000 -4.6693
5.0000 -4.6693
5.0000 -4.6693
5.0000 -4.6693
5.0000 -4.6693
5.0000 -4.6693
6.0000 -2.1160
6.0000 -2.1160
6.0000 -2.1160
6.0000 -2.1160
6.0000 -2.1160
6.0000 -2.1160
6.0000 -2.1160
7.0000 2.6555
7.0000 2.6555
7.0000 2.6555
7.0000 2.6555
7.0000 2.6555
7.0000 2.6555
7.0000 2.6555
8.0000 6.2369
8.0000 6.2369
8.0000 6.2369
8.0000 6.2369
8.0000 6.2369
8.0000 6.2369
8.0000 6.2369


val(:,:,3) =

3.0000 -11.8117
3.0000 -11.8117
3.0000 -11.8117
3.0000 -11.8117
3.0000 -11.8117
3.0000 -11.8117
3.0000 -11.8117
4.0000 -10.5991
4.0000 -10.5991
4.0000 -10.5991
4.0000 -10.5991
4.0000 -10.5991
4.0000 -10.5991
4.0000 -10.5991
5.0000 -7.3754
5.0000 -7.3754
5.0000 -7.3754
5.0000 -7.3754
5.0000 -7.3754
5.0000 -7.3754
5.0000 -7.3754
6.0000 -1.8698
6.0000 -1.8698
6.0000 -1.8698
6.0000 -1.8698
6.0000 -1.8698
6.0000 -1.8698
6.0000 -1.8698
7.0000 1.8422
7.0000 1.8422
7.0000 1.8422
7.0000 1.8422
7.0000 1.8422
7.0000 1.8422
7.0000 1.8422
8.0000 5.4180
8.0000 5.4180
8.0000 5.4180
8.0000 5.4180
8.0000 5.4180
8.0000 5.4180
8.0000 5.4180
9.0000 9.9071
9.0000 9.9071
9.0000 9.9071
9.0000 9.9071
9.0000 9.9071
9.0000 9.9071
9.0000 9.9071


.. und so für alle sechs Iterationen auf der dritten Dimension:
- Die Werte beider Spalten für die Werte 4 - 10 der ersten Spalte 7 mal
"repelem".
- Die Werte beider Spalten für die Werte 5 - 10 der ersten Spalte 6 mal
"repelem".


Man beachte dass bei der ersten und letztens Iteration der dritten Dimension nur 6 mal, anstatt wie bei den anderen Iterationen, 7 Mal repelem angewandet wird.

Ich hoffe, das konnte es etwas verdeutlichen
LG
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 17.02.2021, 11:14     Titel:
  Antworten mit Zitat      
Nein, der erklärt es nicht.

(Zumal beim ersten von dir Kopierten Output repelem offensichtlich nur 5x angewand wurde.)

Was sind die Ausgangswerte?
Erstelle ein Minimalbeispiel (vom einfachen zum schweren!)
Und beschreibe daran deine derzeitigen Schritte mit Code.
Nutze die Code-umgebung.

Also z.B.
Code:
randi(10, 20, 2, 2 ); %erstellt kleinere Beispielmatrix
 



Was ist "und so für alle sechs Iterationen auf der dritten Dimension:"
Soll repelem nur auf der dritten Matrixdimension angewandt werden?
Oder stehen in der dritten Dimension die Zahlen für repelem?
Oder verwendest du einfach nur Iteration falsch und meinst, dass du über die dritte Dimension iterieren möchtest?
(6 Iterationen ist nicht das gleiche wie über eine Dimension, die zufällig die Mächstigkeit 3 hat, zu iterieren.)
Wenn letzteres gemeint ist, dass versuche doch zuerst einmal ein einer nx2 - Matrix das Problem zu lösen, bzw. hier als Minimalbeispiel darzustellen.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Berto

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.02.2021, 11:32     Titel:
  Antworten mit Zitat      
Meine Variable "dat" sieht so aus:

dat(:,:,1) =

2.0000 -24.0928
3.0000 -23.8670
4.0000 -16.5275
5.0000 -7.5542
6.0000 1.4624
7.0000 21.0305
8.0000 24.5796
9.0000 26.4926
10.0000 24.4813


dat(:,:,2) =

2.0000 -7.0003
3.0000 -3.6276
4.0000 -5.7030
5.0000 -4.6693
6.0000 -2.1160
7.0000 2.6555
8.0000 6.2369
9.0000 7.6308
10.0000 7.4880

Code:

for i = 1:size(dat,3)
   
    temp(:,1,i)=repelem(dat(:,1,i),7)
    temp(:,2,i)=repelem(dat(:,2,i),7)
   
end

temp(43:63,:,1)=[];  %Das wäre mein nächster Schritt gewesen, um für jede Wiederholung auf der dritten Dimension einzelns die Spaltenr auszulöschen, die überflüssig sind


temp(43:63,:,:)=[];

 
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.02.2021, 12:17     Titel:
  Antworten mit Zitat      
Hallo Berto,
Zitat:
temp(43:63,:,1)=[]; %Das wäre mein nächster Schritt gewesen, um für jede Wiederholung auf der dritten Dimension einzelns die Spaltenr auszulöschen, die überflüssig sind
temp(43:63,:,:)=[];

Wieso "überflüssig"? Was ist das Kriterium um zu entscheiden, welche Daten überflüssig sind?

Statt mehrdimensionale Arrays zu erstellen und zusammen zu fügen, ist es im Allgemeinen effizienter, einfach einen passenden Indexvektor zu benutzen. Statt also die Daten per repelem zu vervielfältigen könnte es auch reichen diesen Befehl zum Erstellen des Indexvektors einzusetzen.

In deinem Beispiel ist immer noch nicht klar, was du als Ausgabe bekommen möchtest.

Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 17.02.2021, 12:44     Titel:
  Antworten mit Zitat      
1.
Bitte nicht die imaginäre Zahl i überschreiben. i als Laufindex ist immer ungünstig.

2.
deine Zeilennummern (nicht Spalten~, wie du schreibst - oder sind die Matritzen transponiert dargestellt?) fangen bei 2 an?

3. Warum wendest du repelem nicht direkt auf die gesamte (Teil-)matrix an?
Code:
   temp(:,2,i)=repelem(dat(:,:,i),7,1)


4.
Code:
temp(43:63,:,1)=[];  %Das wäre mein nächster Schritt gewesen, um für jede Wiederholung auf der dritten Dimension einzelns die Spaltenr auszulöschen, die überflüssig sind
temp(43:63,:,:)=[];


Warum nur Zeilen 43 bis 63?

warum wendest du Repelem auf die erste Spalte an (die mit den fortlaufenden Nummern), wenn du diese später gar nicht mehr brauchst?

5.
ich persönlich würde mir für den erst einfachen VErsuch drei Indexvektoren erstellen.*
Code:
iStart = [....]; % enthaelt Startzeile je Schritt
iEnd = [....]; % enthaelt Endzeile je Schritt
irepelem = [6 7 7 7 6]; % enthaelt Nummer für repelem je Schritt


Diesen dann in der Schleife einsetzen.


(*: ich würde sogar nur mit einer Indexmatrix arbeiten, aber für die Übersichtlichkeit sind einzelne Vektoren am Anfang einfacher)
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
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 - 2024 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.