如果文本文件中的数据如下所示(字符串以空格分隔):
x1 x2 x3 ...
您可以使用TEXTSCAN将字符串读入元胞数组,如下所示:
fid = fopen('file.txt','r');
A = textscan(fid,'%s');
fclose(fid);
A = A{:};
A现在将字符串存储在一个元胞数组中:{'x1'; 'x2'; 'x3'; ...} . 现在,要从这些字符串之一中创建一个变量并为其分配一个值,我将使用ASSIGNIN:
assignin('base',A{1},[1 2; 1 2]);
这将在基础工作区中创建一个变量x1并将其赋值为[1 2; 1 2]。第一个参数可以是 'base' 或 'caller' 以在 MATLAB 基础工作区或调用者函数的工作区中创建变量。您将对A中的每个字符串名称重复此操作,并为其提供您想要的任何值。
替代选项:
这是我上面给你的另一个答案。上述答案解决了您在问题中提出的具体问题。这个答案为您提供了一个完全不同的选择,可能会避免按照您在问题中描述它们的方式做事,并且希望它会让您的事情变得更容易......
如果我理解您的问题,您基本上有 256 个 2×2 矩阵,并且您想随机选择其中的 30 个。这些 2×2 矩阵中的每一个听起来都像是存储在自己的变量(x1到x256)中。相反,我建议将所有 256 个矩阵存储在一个变量中作为 3-D 数组:
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
或单元格数组:
xArray = cell(1,256); % Initializes an empty array of cells
xArray{1} = [1 1; 2 2]; % Enters a value for the first matrix
您必须先初始化所有值。然后,如果您想随机选择 30 个值,接下来可以使用RANDPERM随机化 3-D 数组的第三维顺序或元胞数组的顺序:
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
然后只需使用xArray中的前 30 个条目进行计算(而不是像以前那样使用单个变量):
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
您可以不断重复使用 RANDPERM 来不断生成新的随机矩阵数组。如果您必须跟踪正在使用的原始矩阵,则必须在随机化xArray后添加此行:
startOrder = startOrder(index);
现在startOrder的条目将告诉您矩阵的原始位置。例如,如果 startOrder 中的第一个数组条目是 40,则xArray的第一个位置的矩阵最初是您在初始化 xArray 时输入的第 40个矩阵。
希望这可以帮助!