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

Werte von Structs festlegen

 

looo

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2010, 11:38     Titel: Werte von Structs festlegen
  Antworten mit Zitat      
Hallo,

ist es möglich mehrere Feld von Structs direkt festzulegen?

so mache ich das mit einer Schleife:
Code:
for i=1:10, A(i).a=5; end

auslesen kann ich alle auf einmal:
Code:
[A.a]
ans =

     5     5     5     5     5     5     5     5     5     5

aber die Zuweisung funktioniert so nicht:
Code:


Gibt einen Befehl mit dem ich alle Felder eines Structs direkte mit einer Konstante belegen kann?


Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 12.08.2010, 11:58     Titel:
  Antworten mit Zitat      
Hi,

meinst du sowas:
Code:

[A.a(1:5)] = [1 2 3 4 5];
A.a

ans =

     1     2     3     4     5

[A.a(1:5)] = 1;
A.a

ans =

     1     1     1     1     1
 

Gruß,
Vito
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 12.08.2010, 12:23     Titel:
  Antworten mit Zitat      
Hi,

oder meint er vlt das hier:
Code:

A=repmat(struct('a',5),1,10)
 


gruss
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
looo

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2010, 12:57     Titel:
  Antworten mit Zitat      
Fourier hat Folgendes geschrieben:
Hi,

oder meint er vlt das hier:
Code:

A=repmat(struct('a',5),1,10)
 


gruss


Super, genau das meinte ich. "repmat" kannte ich noch nicht.
 
looo

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2010, 13:09     Titel:
  Antworten mit Zitat      
noch was:

Ist es möglich anstatt dem Struct A(1:10).a eine Konstante zuzuweisen, auch einen Vektor zuzuweisen, so dass:

Code:

for i=1:10
  A(i).a=V(i);
end
 

mit einem beliebigen Vektor V.
Kann man das ohne Schleife realisieren? Mit repmat habe ich das nicht geschafft.
 
looo
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 12.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2010, 13:17     Titel:
  Antworten mit Zitat      
So hab mich mal registriert, da man seine Posts als Gast nicht editieren kann:

Ich habe ein weiteres Problem:

Wenn ich mehrere Felder (A.a, A.b, A.c) in meinem Struct "A" habe und die Felder (A.a und A.b) wie folgt ändern möchte:

Code:

for i=1:10
 A(i).a=5;
 A(i).b=V(i);
end
 


funktioniert das nicht mit dem Befehl "repmat", denn A=repmat(...) löscht die existierenden Felder von A.

Gibt es ne andere Lösung?
Private Nachricht senden Benutzer-Profile anzeigen
 
Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 12.08.2010, 14:14     Titel:
  Antworten mit Zitat      
Hi,

das kannst du auch ohne Schleife
Code:

V1=[2 14 9 23 1];
V2=[13 24 9 5 17];
[A.a] = V1;
[A.b] = V2;
 

Gruß,
Vito
Private Nachricht senden Benutzer-Profile anzeigen
 
looo
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 12.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2010, 14:20     Titel:
  Antworten mit Zitat      
Nein das funktioniert nicht, bzw. ist nicht das was ich meine.

Schau dir mal folgendes Ergebnis an (Copy&Past in Matlab):

Code:

V=1:10;
for i=1:10
 A(i).a=5;
 A(i).b=V(i);
end


Das möchte ich ohne Schleife realisieren, so dass ein anderes existierendes Feld A.c nicht verändert wird.
Private Nachricht senden Benutzer-Profile anzeigen
 
Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 12.08.2010, 14:45     Titel:
  Antworten mit Zitat      
Hi,

ich verstehe Dich nicht der Unterschied ist doch nur, dass es bei dir 10-Zeilen, aber egal. Schau Dir das an.
Code:

V1 = repmat(5,10,1);
V2 = [1:10]';
A.a = V1;
A.b = V2;
% Und wenn Du c ergänzen möchtest, dann wird das restliche nicht verändert. Hier ein Bsp
V3 = [10:-1:1];
A.c = V3;
 

Machmal bitte jetzt Du (Copy/Paste) Wink

Gruß,
Vito
Private Nachricht senden Benutzer-Profile anzeigen
 
looo
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 12.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2010, 15:01     Titel:
  Antworten mit Zitat      
Habs gemacht => gibt aber nicht das gewünschte Ergebnis (trotzdem Danke für die Rückmeldung ) Wink

Der Unterschied zwischen Deinem Vorschlag und meinem gewünschten Ergebnis ist folgender:

Bei Dir ist ein 10x1 Vektor im Feld A(1).a.
Die Felder A(2:10).a sind leer.
Code:
size(A)
ans = 1 1
size(A.a)
ans = 10 1
 


Bei meinem struct soll in jedes Feld genau eine Zahl und das struct "A" soll 1x10 sein.
d.h.
Code:
size(A)
ans = 10 1
size(A.a)
ans = 1 1
 


Das macht einen Unterschied !!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 12.08.2010, 15:23     Titel:
  Antworten mit Zitat      
Hallo,

das Feld a kannst du zumindest so verändern:
Code:

[A.a]=deal(11);
 


gruss
_________________

Ein schlechter General ist besser als zwei gute.
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: 12.08.2010, 15:56     Titel: Re: Werte von Structs festlegen
  Antworten mit Zitat      
Hallo looo,

Code:
A = struct('a', cell(1, 5));
[A.a] = deal(1);
 


Wenn das sehr häufig gebraucht wird, lohnt es sich eine Kopie von DEAL zu erstellen, die nur die erforderlichen Checks durchführt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
looo
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 12.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2010, 16:06     Titel:
  Antworten mit Zitat      
Danke. Die konstante Zuweisung ist abgehakt.

Gibt ne Lösung für die Zuweiung eines Vektors in die Felder (A.b):
Code:
V=1:10;
for i=1:10
 A(i).b=V(i);
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Vito
Forum-Guru

Forum-Guru


Beiträge: 315
Anmeldedatum: 02.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 12.08.2010, 16:08     Titel:
  Antworten mit Zitat      
Hi,

vielleicht kommst du hiermit weiter:
Code:

c = {5,5,5,5,5,5,5,5,5,5;1,2,3,4,5,6,7,8,9,10}';
fields = {'a', 'b'};
A = cell2struct(c, fields, 2)';
A.a;
A.b
 

bekommst das was du willst denke Rolling Eyes ich ohne Schleife.

Gruß,
Vito

PS: machmal (Copy/Paste)
Private Nachricht senden Benutzer-Profile anzeigen
 
looo
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 12.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2010, 16:10     Titel:
  Antworten mit Zitat      
Perfekt Vito. Very Happy

wobei ein Haken gibts noch: bei einem existierenden Struct klappt das nicht direkt.

ABER:
Code:

A = struct('a', cell(1, 10));
[A.a] = deal(1);

% neues Struct mit dem neuen Feld:
b = {1,2,3,4,5,6,7,8,9,10}';
fields = {'b'};
B = cell2struct(b, fields, 2)';

% Felder von Struct B in Struct A kopieren:
[A.b]=B.b;
 
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.