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

Sub-Array

 

Ewkos
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 30.10.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2016, 21:57     Titel:
  Antworten mit Zitat      
Hallo,

danke euch beiden für die Hilfe, nun klappt es:)

Ich brauche leider nochmal eure Hilfe; ich möchte nun von einem n-dimensionalem Array aus bestimmten Spalten nur ein Wert haben; also zB;
Code:
>> C

C(:,:,1) =

    0.8147    0.1270    0.6324
    0.9058    0.9134    0.0975


C(:,:,2) =

    0.2785    0.9575    0.1576
    0.5469    0.9649    0.9706


C(:,:,3) =

    0.9572    0.8003    0.4218
    0.4854    0.1419    0.9157


C(:,:,4) =

    0.7922    0.6557    0.8491
    0.9595    0.0357    0.9340

Hierbei will ich zB den Wert der ersten und dritten Dimension auf 1 setzen, wenn die Dimensionen fest sind klappt das so:
Code:
E=C(1,:,1)

E =

    0.8147    0.1270    0.6324


Nur funktioniert das leider nicht allgemein. Das Problem leigt nun darin, dass ich es nicht schaffe ein Array zu bauen, welches Zahlen und Doppelpunkte enthält.

Allgemein soll s so funktionieren, dass ich ein n-dimensionales Array habe der Dimension n und ich beliebig viele der n Dimensionen festlegen kann.
Das ist bisher mein Code; wie gesagt mit dem Problem, dass ich keine Zahlen in einen Vektor aus ":" machen kann.
Dabei ist data die ursprüngliche Tabelle und cond die festzusetztenden Dimensionen und condVal die entsorechenden Werte:
Code:
help = zeros(length(size(data)), 1);
for i=1:1:length(cond)
   help(cond(i)) = condVal(i);
end
for i=1:1:length(help)
   if help(i) == 0
      help(i) = ':';
   end
end
newTable = data(help);


Es wäre schön, wenn ihr helfen könntet,

Viele Grüße
Ewkos
Private Nachricht senden Benutzer-Profile anzeigen
Gesplittet: 12.11.2016, 15:11 Uhr von Jan S
Von Beitrag Dimensionsreduktion bei mehrdimensionalem Array aus dem Forum Sonstige MATLAB Fragen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.11.2016, 15:19     Titel:
  Antworten mit Zitat      
Hallo Ewkos,

Bitte stelle immer nur eine Frage pro Thread. Danke.

Wie ich schon in http://www.gomatlab.de/dimensionsre.....-array-t42376.html#170009 erklärt habe, funktioniert das mit einem Cell-Array:

Code:
index = cell(ndims(data), 1);  % NDIMS statt LENGTH(SIZE)
% "help" ist ein wichtiger Matlab-Befehl - besser nicht überschreiben

% Keine Schleife notwendig:
index(cond) = num2cell(condVal);

for i = 1:length(index)
   if index{i} == 0
      index{i} = ':';
   end
end
newTable = data(index{:});

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 30.10.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2016, 16:44     Titel:
  Antworten mit Zitat      
Hallo Jan,

ja ich mache in Zukunft einen neuen Thread auf, aber hier dachte ich es passt noch dazu; baer auch egal.
Wenn ich dein Code auf mein Beispiel mit dem C und cond und condVal anwende erhalte ich:
Code:
newTable =

   Empty matrix: 1-by-0


Das Problem liegt darin, dass die for-Schleife nicht funktioniert, also nur Zahlen in dem index-Array stehen und da wo ":" rein soll steht immer noch nichts, also weiterhin [].

Der Code von dem Link funktiort leider nur für das ursprüngliche Problem und nicht das aktuelle.


Edit: wenn ich manuell
Code:
index{2} = ':'
eigebe gehts...

Grüße
Ewkos
Private Nachricht senden Benutzer-Profile anzeigen
 
Ewkos
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 30.10.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2016, 19:07     Titel:
  Antworten mit Zitat      
Hallo,

ich habs nun hinbekommen, indem ich:
Code:

verwendet habe.

Der Hinweis mit dem "help" ist richtig; diese Bezeichung war nicht sehr clever.

Vielen Dank für eure Hilfe!

Grüße
Ewkos
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: 18.11.2016, 13:10     Titel:
  Antworten mit Zitat      
Hallo Ewkos,

Anmerkung:
Code:
if isempty(index{i})==1
% Einfacher:
if isempty(index{i})

Je kompakter der Code, desto weniger Chancen hat man für einen Tippfehler :-)

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 30.10.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2016, 23:37     Titel:
  Antworten mit Zitat      
Hallo Jan,

ja das stimmt wohl; das könnte man noch weglassen:)
Auf den Gedanken kam ich da nur leider nicht, da ich zunächst einen funktionierenden Befehl gesucht habe und am Ende froh war das es dann klappte:)

Viele Grüße
Ewkos
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.