Wenn die Daten in der Textdatei sieht wie folgt aus (Strings getrennt durch Leerzeichen):
x1 x2 x3 ...
Sie können die Strings in einem Zellenfeld gelesen TEXTSCAN mit etwa so:
fid = fopen('file.txt','r');
A = textscan(fid,'%s');
fclose(fid);
A = A{:};
A speichert die Strings jetzt in einem Zellenfeld: {'x1'; 'x2'; "x3"; ...}. Nun, um eine Variable zu machen aus einem dieser Strings und ihm einen Wert zuweisen, würde ich ASSIGNIN verwenden:
assignin('base',A{1},[1 2; 1 2]);
Dies wird eine variable x1 in der Basis-Arbeitsbereich erstellen und zuweisen den Wert [1 2; 1 2]. Das erste Argument kann entweder 'Basis' oder 'Aufrufer' sein, um eine Variable entweder im MATLAB-Basisarbeitsbereich oder im Arbeitsbereich der Aufruferfunktion zu erstellen. Sie würden dies für jeden String-Namen in A wiederholen und den gewünschten Wert angeben.
WECHSELN OPTION:
Dies ist eine alternative Antwort auf das, was ich Ihnen oben gab. Die obige Antwort bezieht sich auf das spezifische Problem, das Sie in Ihrer Frage angesprochen haben. Diese Antwort gibt Ihnen eine ganze andere Möglichkeit zu vermeiden, Dinge zu tun, wie Sie sie in Ihrer Frage beschrieben haben, und es wird Ihnen hoffentlich die Dinge leichter machen ...
Wenn ich Ihr Problem verstehe, haben Sie im Grunde 256 2-by-2-Matrizen, und Sie möchten 30 von ihnen zufällig auswählen. Jede dieser 2-mal-2-Matrizen klingt so, als wäre sie in einer eigenen Variablen gespeichert (x1 bis x256). Stattdessen würde ich alle 256 Matrizen in nur eine Variable entweder als ein 3-D-Array vorschlagen Speichern:
xArray = zeros(2,2,256); % Initialize all matrices as [0 0; 0 0]
xArray(:,:,1) = [1 1; 2 2]; % This enters a value for the first matrix
oder ein Zellenfeld:
xArray = cell(1,256); % Initializes an empty array of cells
xArray{1} = [1 1; 2 2]; % Enters a value for the first matrix
Sie würden die Werte zunächst initialisiert werden müssen. Dann, wenn Sie zufällig wollen 30 Werte auswählen, können Sie neben der Reihenfolge der Randomisierung entweder der dritten Dimension des 3-D-Array oder die Reihenfolge des Zellenfeldes durch RANDPERM mit:
startOrder = 1:256; % The default order of the matrices
index = randperm(256); % Randomly order the numbers 1 to 256
xArray = xArray(:,:,index); % For a 3-d array
xArray = xArray(index); % For a cell array
Dann benutzen Sie einfach die ersten 30 Einträge in xArray für Ihre Berechnungen (anstelle der einzelnen Variablen wie Sie vorher waren):
x = xArray(:,:,1); % Puts the first matrix from the 3-D array in x
x = xArray{1}; % Puts the first matrix from the cell array in x
Sie halten die Verwendung von RANDPERM Wiederholung neuen randomisierten Arrays von Matrizen halten zu erzeugen. Wenn Sie den Überblick zu behalten haben, von denen ursprünglichen Matrizen Sie verwenden, müssen Sie diese Zeile hinzufügen, nachdem Sie xArray randomisieren:
startOrder = startOrder(index);
nun die Einträge von Startreihenfolge erhalten Sie die ursprüngliche Position erzählen eine Matrix war Wenn beispielsweise der erste Arrayeintrag in startOrder 40 ist, dann war die Matrix in der ersten Position xArray ursprünglich die 40. Matrix, die Sie beim Initialisieren xArray eingegeben haben.
Hoffe, das hilft!
Werden in der Textdatei nur die Variablennamen gespeichert oder werden auch die Daten gespeichert, die diesen Variablen zugewiesen werden sollen? – gnovice
Das klingt nach einem sehr verwirrenden und komplizierten Problem. Könnten Sie auf die größere Anwendung eingehen, für die alles verwendet wird? Ich habe das Gefühl, dass es viel leichtere Möglichkeiten gibt, mit Ihrem Problem umzugehen, als Variablennamen aus einer Datei zu lesen (wie zum Beispiel mit .mat Dateien). – gnovice