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

Zahlen aus Cell Array durch Null ersetzen in 3D Matrix

 

Valentina

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2016, 16:07     Titel: Zahlen aus Cell Array durch Null ersetzen in 3D Matrix
  Antworten mit Zitat      
Liebe Matlabgemeinde,

ich warne schonmal vorab, ich bin ein Matlab-Anfänger... ich haben eine 3D Matrix (nxmxk) und k Vektoren in einem cell array mit 1xk Spalten. Jetzt möchte ich für alle Einträge der Vektoren in der k-ten Spalte die Einträge der Matrix der k-ten Dimension gleich null setzen und mir eine neue nxmxk Matrix ausgeben lassen. Ich versuche mal ein kleines Beispiel, das man sich das vorstellen kann:

Code:
A=[1 1 2 3; 4 2 5 6; 1 3 4 2];
A(:,:,2)=[5 3 1 2; 8 5 8 1; 4 5 1 5];

>> A

A(:,:,1) =

     1     1     2     3
     4     2     5     6
     1     3     4     2


A(:,:,2) =

     5     3     1     2
     8     5     8     1
     4     5     1     5

v=cell(1,2);
v(1,1)={[2 6]};
v(1,2)={[1 5 8]};

>> v

v =

    [1x2 double]    [1x3 double]
 


Das waren meine Überlegungen:
Code:

for k=1:2
    for ii=v{1,k}
        A(A(:)==ii)=0;
    end
end
 


Herauskommen sollte:

Code:
A(:,:,1) =

     1     1     0     3
     4     0     5     0
     1     3     4     0

A(:,:,2) =

     0     3     0     2
     0     0     0     0
     4     0     0     0

 


Bei mir funktioniert das auch schon, aber leider nur wenn k=1:1. Außerdem ist das was ich habe durch die for Schleifen sehr langsam. Ich will damit eine 1700x21x1500 Matrix beeinflussen. Hat jemand eine Idee wie das effizient geht, evenuell ohne schleifen?

Vielen Dank,
Valentina


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.12.2016, 19:17     Titel: Re: Zahlen aus Cell Array durch Null ersetzen in 3D Matrix
  Antworten mit Zitat      
Hallo Valentina,

In deinem Code werden noch alle Elemente von A auf 0 gesetzt, und nicht nur die in der k.ten Untermatrix. Ist das so gewollt?

Code:
for k = 1:numel(v)
  SubA = A(:,:,k);
  match = ismember(A(:, :, k), v{k});
  SubA(match) = 0;
  A(:, :, k) = SubA;
end

Das Arbeiten mit den Untermatrizen ist aber unpraktisch. Hm. Nächster Versuch:
Code:
sizeA = size(A);
A = reshape(A, [], sizeA(3));  % As matrix temporary
for k = 1:numel(v)
  A(ismember(A(:, k), v{k}), k) = 0;
end
A = reshape(A, sizeA);

Ja, jetzt muss nichts mehr hin- und her-kopiert werden.

Schleifen sind nicht grundsätzlich langsamer als vektorisierter Code. Es kommt darauf an, ob das erstellen temporärer Arrays mehr Zeit kostet als die Vektorisierung einbringt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Valentina

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.12.2016, 11:12     Titel: Re: Zahlen aus Cell Array durch Null ersetzen in 3D Matrix
  Antworten mit Zitat      
Super, vielen Dank. Das funktioniert! Very Happy
 
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.