Matlab 向量中非连续大小矩阵的分裂

Matlab 向量中非连续大小矩阵的分裂,matlab,matrix,Matlab,Matrix,我正在用Matlab编写一个软件。在这里,用户可以定义一个维度,比如3 该维度随后是for循环的迭代次数。在这个循环中,我构造了一个矩阵来存储每次迭代期间生成的结果。因此,每次迭代的数据都存储在矩阵的一行中 因此,矩阵的大小取决于循环的大小以及用户输入 现在,我想分离这个矩阵(cl_矩阵)的每一行,并自动为每一行创建单独的向量。一个人将如何继续?我被困在这里 到目前为止,我已经: Angle = [1 7 15]; for i = 1:length(Angle) %% do some c

我正在用Matlab编写一个软件。在这里,用户可以定义一个维度,比如3

该维度随后是for循环的迭代次数。在这个循环中,我构造了一个矩阵来存储每次迭代期间生成的结果。因此,每次迭代的数据都存储在矩阵的一行中

因此,矩阵的大小取决于循环的大小以及用户输入

现在,我想分离这个矩阵(cl_矩阵)的每一行,并自动为每一行创建单独的向量。一个人将如何继续?我被困在这里

到目前为止,我已经:

Angle = [1 7 15];
for i = 1:length(Angle)
    %% do some calculations here %%
    cl_matrix(i,:) = A.data(:,7);
end
我希望根据角度的长度自动执行此操作:

length(Angle)
cl_1 = cl_matrix(1,:);
cl_7 = cl_matrix(2,:);
cl_15= cl_matrix(3,:);

谢谢

工作区中动态生成通过聚合字符串和数值(如您的问题所示)来生成其名称的变量的唯一方法是使用
eval
函数

然而,
eval
仅仅是一个远离“邪恶”的角色,它既诱人又危险

直接使用
cl_矩阵
和生成数组集
cl_1
cl_7
cl_15
之间的一种可能的折衷方法是创建一个
结构
whos
字段

实际上,您可以通过以下方式生成
struct
whos字段
cl\u 1
cl\u 7
cl\u 15

cl_struct.(['cl_' num2str(Angle(i))])=cl_matrix(i,:)
(您可能会注意到字段名,例如,
cl_1
,其生成方式与使用
eval
生成它的方式相同)

使用这种方法在使用
eval
生成数组方面具有显著优势:您可以访问
字段
od
结构(即它们的内容),甚至不知道它们的名称

在下面的代码中,您可以找到实现此方法的脚本的修改版本

脚本将生成两个结构:

  • 第一个,
    cl\u struct\u same\u length
    用于存储
    cl\u矩阵的行
  • 第二种方法,
    cl\u struct\u different\u length
    用于存储不同长度的数组
在脚本中,有一些关于如何访问文件(即数组)以执行某些计算的示例(在示例中,评估每个文件的
平均值

您可以使用以下函数访问结构字段:

  • getfield
    获取存储在其中的值
  • fieldnames
    获取字段的名称(动态生成)
更新的脚本

Angle = [1 7 15];
for i = 1:length(Angle)
   % do some calculations here %%
% % %   cl_matrix(i,:) = A.data(:,7);
   % Populate cl_matrix
    cl_matrix(i,:) = randi(10,1,10)*Angle(i);
    % Create a struct with dinamic filed names
    cl_struct_same_length.(['cl_' num2str(Angle(i))])=cl_matrix(i,:)
    cl_struct_different_length.(['cl_' num2str(Angle(i))])=randi(10,1,Angle(i))
end
% Use "fieldnames" to get the names of the dinamically generated struct's field
cl_fields=fieldnames(cl_struct_same_length)
% Loop through the struct's fileds to perform some calculation on the
% stored values
for i=1:length(cl_fields)
   cl_means(i)=mean(cl_struct_same_length.(cl_fields{i}))
end
% Assign the value stored in a struct's field to a variable
row_2_of_cl_matrix=getfield(cl_struct_different_length,(['cl_' num2str(Angle(2))]))

希望这能有所帮助。

我不清楚你在问什么。为什么矩阵是非连续的?你为什么要这样做?这是非常糟糕的做法,将来只会导致更多的头痛。你有一个完全可用的矩阵和合理的索引:我建议你使用它。由于大小变化,它取决于“角度”的长度。因此,输出向量的数量会发生变化,使用单元数组如何?我同意比克的观点,这可能会导致未来的其他问题。如果您真的需要,我所能想到的就是使用
eval
。但这既慢又难看。@BalrajBoyal当
Angle
的长度改变时,
cl\u矩阵的长度也会改变。如果你担心的话,请给我们看看你的插值代码。我不明白为什么
cl_457
cl_矩阵(42,:)
容易。特别是当你的下一个问题可能是“我如何迭代所有这些变量名,
c1
c1\u7
…”。在
eval
和“邪恶”之间有一个很好的类比