2017-01-05 2 views
0

Ich habe Sequenz von Daten in MATLAB: data1, data2, data3, .... Ich möchte sie nacheinander drucken. Ich stecke darauf fest.Sequenz von Daten in MATLAB

clear; clc; 
data1=[1,2]; 
data2=[3,4]; 
n=[1,2]; 
for i=1:length(n) 
    fname(i,:)=sprintf('data%d',n(i)); 
end 
+0

Haben Sie 'disp (data1)' versucht? – Suever

+0

Wenn ich 'disp (data1)' es zeigt die Matrix aber, möchte ich alle Matrizen anzeigen, die ich habe und ich will es durch einen Zyklus, weil sie viele wie 70 sind, und 'disp (fname (1, :)) 'funktioniert nicht, es zeigt nur data1. –

+0

Warum hätten Sie 70 separate Datenvariablen anstelle eines einzelnen zweidimensionalen Arrays (oder eines Zellenarrays, wenn die Variablen unterschiedliche Längen haben), die Sie problemlos durchlaufen können? – beaker

Antwort

1

Funktioniert das für Sie?

clear; clc; 
data1=[1,2]; 
data2=[3,4]; 
n=[1,2]; 
for i=1:length(n) 
    eval(['data' num2str(n(i))]) 
end 
+0

Es funktioniert wie ein Zauber. Vielen Dank. –

+0

Bitte akzeptieren Sie die Antwort, wenn die Antwort zufriedenstellend ist. – Abhinav

+0

Sicher, es wollte nur ich 2 Minuten warten. Danke nochmal, genau das habe ich gesucht. –

1

Eine mögliche Lösung nicht die Verwendung von eval Beteiligung könnte folgende sein.

Grundsätzlich besteht es aus den folgenden Schritten:

  • die Liste der Daten in dem Arbeitsbereich Erhalten (mit who Funktion)
  • Identifizieren der zu druckenden Daten (unter Verwendung von regexp die Variablen Namen des identfy datax Form, wo x eine Zahl)
  • speichern diese Variablen in einer temporären Datei .mat
  • Last der .mat Datei in eine Struktur, die nur die Variablen haben können
  • gedruckt werden nutzen die dynamic field names Zugriff auf die Variablen

Dies ist der Code zu erhalten:

% Define some data 
data1=[1,2]; 
data2=[3,4]; 
data3=rand(5) 
data4a=rand(5) 
dataaaa3=rand(5) 
var_1=1 
b=2 
% Get the list of data in the Workspace 
str=who 
% Identify the data to be printed 
var_to_print=regexp(str,'data\d$') 
idx=~cellfun(@isempty,var_to_print) 
% Down select the variables to be printed 
str{idx} 
% Generate a temporary ".mat" filename 
tmp_name=[tempname '.mat'] 
% Save the data to be printed in the temporary ".mat" file 
save(tmp_name,str{idx}) 
% Load the data to be printed into a struct 
v=load(tmp_name) 
% Get the names of the varaibles to be printed 
f_name=fieldnames(v) 
% print the value of the variables 
for i=1:length(f_name) 
    [char(f_name(i)) ' = '] 
    v.(f_name{i}) 
end 
% Move the temporary ".mat" file in the recycle folder 
recycle('on') 
delete(tmp_name) 

Hoffnung, das hilft.

Qapla '

+0

Sie können auch 'save (tmp_name, 'data *')' – Suever

+0

@Suever 'save (tmp_name, 'data *')' speichert auch Variablen wie 'data4a',' dataaaa3' (ref., Für die Variable in meiner Antwort), während das OP sagte die Variablen Namen sind 'data1',' data2'. –

+0

Ah ja, guter Punkt. Du könntest wahrscheinlich auch 'save (tmp_name,'regexp ','^data \ d + $ ')' – Suever