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

Elemente in Zelle bearbeiten / =0 setzen?

 

Zacken
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 19.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2011, 15:49     Titel: Elemente in Zelle bearbeiten / =0 setzen?
  Antworten mit Zitat      
Hallo Leute,

ersteinmal ein großes Lob für das Forum, habe schon viel Hilfe lesen können und mich endlich einmal angemeldet.

Leider habe ich gleich eine Frage:


Ich habe mir eine 27x5 Cell berechnet (wobei die 5 variabel ist). Nun möchte ich die Erste Zeile durchsuchen und alle Werte kleiner als z.B. 30 gleich Null setzen.

Mit einer if-schleife weiß ich leider keine praktikable Lösung.
Die andere Möglichkeit mit find(A(1,Smile<30) klappt hier ebenfalls nicht da es sich um eine Zelle handelt oder?

Hat jemand vielleicht einen Hinweis wie ich vorgehen könnte?

Vielen Dank schon einmal und einen schönen Sonntag!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.06.2011, 16:02     Titel:
  Antworten mit Zitat      
Hallo,

wenn alle Elemente Doubles sind, bietet es sich an, auch mit einer Double-Matrix zu arbeiten. Umwandlung mit CELL2MAT.
Dann geht auch logische Indizierung (find brauchst du nicht).

Wenn es ein Cell Array bleiben soll, kannst du mit CELLFUN arbeiten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Zacken
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 19.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2011, 16:04     Titel:
  Antworten mit Zitat      
danke für den tipp!

muss leider ein Cell Array für die weiteren Berechnungen bleiben sonst hätt ich es vermutlich schon anders probiert.

Aber cellfun sieht in der hilfe ganz vielversprechend aus!

Vielen Dank

Grüße
Flo
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: 19.06.2011, 16:14     Titel: Re: Elemente in Zelle bearbeiten / =0 setzen?
  Antworten mit Zitat      
Hallo Zacken,

Zitat:
Ich habe mir eine 27x5 Cell berechnet (wobei die 5 variabel ist). Nun möchte ich die Erste Zeile durchsuchen und alle Werte kleiner als z.B. 30 gleich Null setzen.

Das geht zwar auch per CELLFUN. Ein FOR-Schleifen-Ansatz ist aber einfacher:
Code:
C = cell(27, 5);
% Create arbitrary test data:
for iC = 1:numel(C)
  C{iC} = rand(1, 20);
end

% Adjust values of first line:
for iC = 1:size(C, 2)
  value = C{1, iC};
  value(value < 30) = 0;
  C{1, iC} = value;
end

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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 19.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2011, 18:08     Titel:
  Antworten mit Zitat      
Hallo Jan,

tausend Dank funktioniert super mit der Schleife!

Hab leider im nachhinein festgestellt es reicht für die folgende Berechnung nicht aus die Werte gleich 0 zu setzen, sondern ich müsste die gesammte Spalte herauslöschen, falls der erste eintrag einer spalte kleiner als bsp. 30 ist...

hast du vielleicht auch hierfür so eine klasse lösung?

Vielen Dank

Grüße
Zacken
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin1986
Forum-Century

Forum-Century


Beiträge: 121
Anmeldedatum: 20.06.11
Wohnort: ---
Version: Win 2016b Linux 2016b
     Beitrag Verfasst am: 20.06.2011, 18:41     Titel:
  Antworten mit Zitat      
Code:
newC=cellfun(@(x)  x(any(x>0)), C, 'UniformOutput',false)

damit bekommst du alle C die größer als 0.5 sind... meintest du das???
Private Nachricht senden Benutzer-Profile anzeigen
 
Zacken
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 19.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2011, 19:24     Titel:
  Antworten mit Zitat      
nein leider nicht ganz;)

meine matrix sieht beispielsweise so aus:

Code:
%
C=
11   130   180    20   200
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1
 1     1     1     1     1



nun müssten aber alle Spalten die im ersten eintrag einen wert kleiner 30 haben verschwinden, so dass die neue matrix so aussieht:

Code:
%
Cnew=

  130   180  200
     1     1     1
     1     1     1
     1     1     1
     1     1     1
     1     1     1
     1     1     1
     1     1     1
     1     1     1
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin1986
Forum-Century

Forum-Century


Beiträge: 121
Anmeldedatum: 20.06.11
Wohnort: ---
Version: Win 2016b Linux 2016b
     Beitrag Verfasst am: 20.06.2011, 19:52     Titel:
  Antworten mit Zitat      
Achso dann würde ich das so machen....
Code:
newC=C(:,find(cell2mat(C(1,:))>30));

im Klartext gucke ich welche spalten in der ersten Reihe größer als 30 sind und schreibe ich diese in die neue Variable Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Zacken
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 19.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2011, 20:38     Titel:
  Antworten mit Zitat      
ja genial! danke!!!
und so einfach, hätt ich eigentlich fast selber drauf kommen müssen;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Zacken
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 19.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.06.2011, 12:38     Titel:
  Antworten mit Zitat      
und schon taucht das nächste problem auf.

für das löschen der spalten wurde die cell ja in ein mat file umgewandelt.
bräuchte aber am ende wieder ein cell um fortzufahren:(
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 21.06.2011, 13:34     Titel:
  Antworten mit Zitat      
gibt's doch auch ungekehrt...z.B.

Code:

[zeilen,spalten]=size(newC);
D = mat2cell(newC, zeilen,spalten);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin1986
Forum-Century

Forum-Century


Beiträge: 121
Anmeldedatum: 20.06.11
Wohnort: ---
Version: Win 2016b Linux 2016b
     Beitrag Verfasst am: 21.06.2011, 16:03     Titel:
  Antworten mit Zitat      
o.O eigentlich ist newC immer noch eine cell o.O da ich das cell2mat nur für die Indexangabe nutze Wink

Code:
>> C={11 130 180 20 200; 1 1 1 1 1; 1 1 1 1 1};
>> newC=C(:,find(cell2mat(C(1,:))>30));
>> whos
  Name      Size            Bytes  Class    Attributes

  C         3x5              1020  cell              
  newC      3x3               612  cell  
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.