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

Dringend HILFE: Einlesen von Daten aus Cell Array

 

tommylabamba
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 08.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2012, 13:16     Titel: Dringend HILFE: Einlesen von Daten aus Cell Array
  Antworten mit Zitat      
Ich habe ein Cell Array mit
1 x 10 cell
und da drin befinden sich 10 verschiedene Matrizen mit unterschiedlichen größen z.B. 23x33, 12x33, 321x33 usw.

nun lese ich die Daten aus dem Workspace heraus aus mit folgenden Bausteinen:
- constant (die Cell Variable mit den 10 Matrizen)
- diese geht in eine Matlab Funktion rein

ich möchte das die Funktion für alle (also die 10 Matrizen der Cell) die Werte berechnet. Das tut sie aber nicht, sie berechnet nur die Werte der ersten Matrix der Cell array. Wieso?
In der Constanten gebe ich vor Variablenname{1:10} aus workspace auslesen.
In der Funktion gebe ich nur Variablenname als INPUT vor, d.h. ohne die {1:10} Auswahl.
Die Cell array aus dem Workspace ist Zeitunabhängig, deshalb als Constant deklariert.

Ich möchte die verarbeiteten Daten wieder in Cell speichern.
Private Nachricht senden Benutzer-Profile anzeigen


Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 18.07.2012, 13:32     Titel:
  Antworten mit Zitat      
Kann dir leider nicht ganz folgen.
Es wäre sicher leichter wenn du den Code hier posten würdest.
Private Nachricht senden Benutzer-Profile anzeigen
 
tommylabamba
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 08.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2012, 13:50     Titel:
  Antworten mit Zitat      
Variablen:
a % 1 doublewert
variablename{1:10} % cell array mit 10 matrizen
-------------------------------------------------------------

Input Baustein "Constant":
variablenname{1:10} % auslesen aus Workspace

-------------------------------------------------------------

Funktionsbaustein Matlab Code:
function output = berechnen(a,b,c,variablenname)

output = variablenname(:,(a+11))==1;

return;
-----------------------------------------------------

Output Baustein "To Workspace" names Test




Es läuft druch, berechnet aber nur die erste Matrix des Cell Arrays!
wenn ich als Input variablename{1:10} schreibe, streicht er diese weg.
Private Nachricht senden Benutzer-Profile anzeigen
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 18.07.2012, 13:59     Titel:
  Antworten mit Zitat      
Für den Index eines cell Arrays solltest du "{ }" verwenden. Vlt. liegt hier der Fehler.

Bsp.:
Code:

C={'Hallo',[1 2;3 4],-3i;sprand(10,10,.1),{1},[]}
C(1,:)
  ans =
      'Hallo'    [2x2 double]    [0 - 3.0000i]


C{1,:}
  ans =
  Hallo
  ans =
       1     2
       3     4
  ans =
          0 - 3.0000i
 
Private Nachricht senden Benutzer-Profile anzeigen
 
tommylabamba
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 08.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2012, 14:33     Titel:
  Antworten mit Zitat      
wie verarbeite ich aber das Cell array in der funktion damit er alle arrays berechnet und nicht nur den ersten?

so:

output = variablenname(:,:,(a+11))==1;

oder so:

output = variablenname{1:10}(:,(a+11))==1;

oder wie?

in der Funktion muss ich doch auch sagen welche cell er verarbeiten soll oder nicht? ich gebe zwar als input den cell bereich 1:10 vor, aber er berechnet ja nur den ersten cell!
Private Nachricht senden Benutzer-Profile anzeigen
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 19.07.2012, 06:24     Titel:
  Antworten mit Zitat      
mit {} greifst du auf die einzelnen Zellen im Cell Array zu. Mit () auf die Werte innerhalb der ausgewählten Zelle dann.

z.B.: Erste Zelle und dort dann auf das Element in der 2 Reihe und 4 Spalte

CellArray{1}(2,4)

Du kannst auch jedes Element mit einer for Schleife durchgehen
Private Nachricht senden Benutzer-Profile anzeigen
 
tommylabamba
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 08.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2012, 08:51     Titel:
  Antworten mit Zitat      
das ist mir klar. Aber in der Funktion muss ich mit varargin arbeiten oder?

Die vorliegende Beschreibung funktioniert aber trotzdem nicht:

varargin ist ein Cell-Array und enth¨alt die m¨oglichen restlichen Argumente
einer Argumentliste. Beispiel:
Funktionskopf: function fcn(x,y,varargin)
Funktionsaufruf: >> fcn(x,y,p1,p2)
varargin enth¨alt dann die Werte von p1 und p2, d.h. varargin={p1,p2}.
Funktionsaufruf: >> fcn(x,y)
Hier ist varargin leer.

Zur Info:
Ich habe als INPUT für die Fuktion eine constante am Eingang:
variablenname{1:10}

als Fehlermeldung kommt mit output=berechnen(variablenname,varargin):
--> Top-level function cannot have varargin
Private Nachricht senden Benutzer-Profile anzeigen
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 19.07.2012, 09:08     Titel:
  Antworten mit Zitat      
die Fehlermeldung sagt ja schon was du nicht machen darfst:

Top-level function cannot have varargin

hab im Internet diese Seite dazu gefunden:

http://www.mathworks.de/help/toolbox/eml/ug/brlb0rj.html
Private Nachricht senden Benutzer-Profile anzeigen
 
tommylabamba
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 08.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2012, 09:38     Titel:
  Antworten mit Zitat      
Vielen Dank für die Beschreibung.

Leider verstehe ich die Beschreibung nicht.

% %#codegen
% function varargout = inch_2_cm(varargin)
% for i = 1:length(varargin)
% varargout{i} = varargin{i} * 2.54;
% end
%
% To fix the problem, write a top-level function that specifies a fixed number of inputs and outputs and then call inch_2_cm as an external function or subfunction, as in this example:
%
% %#codegen
% function [cmL, cmW, cmH] = conv_2_metric(inL, inW, inH)
% [cmL, cmW, cmH] = inch_2_cm(inL, inW, inH);
%
% function varargout = inch_2_cm(varargin)
% for i = 1:length(varargin)
% varargout{i} = varargin{i} * 2.54;
% end

Muss ich im Hauptprogramm eine Funktion dazu schreiben oder was?
Wäre schön wenn jemand mir das anhand meines Beispiels erläutern könnte.

Zuletzt bearbeitet von tommylabamba am 19.07.2012, 09:41, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Goofy9020
Forum-Century

Forum-Century


Beiträge: 164
Anmeldedatum: 10.08.11
Wohnort: ---
Version: 2009a, 2010b
     Beitrag Verfasst am: 19.07.2012, 09:40     Titel:
  Antworten mit Zitat      
Du darfst anscheinend bei deiner Hauptfunktion nicht das Schlüsselwort varargin verwenden. Erst in einer Unterfunktion dann.
Private Nachricht senden Benutzer-Profile anzeigen
 
tommylabamba
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 87
Anmeldedatum: 08.08.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2012, 10:12     Titel:
  Antworten mit Zitat      
tommylabamba hat Folgendes geschrieben:
Vielen Dank für die Beschreibung.

Muss ich im Hauptprogramm eine Funktion dazu schreiben oder was?
Wäre schön wenn jemand mir das anhand meines Beispiels erläutern könnte.
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.