在矢量中分割非连续大小的矩阵

时间:2015-10-12 14:48:05

标签: matlab matrix

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

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

因此,矩阵的大小取决于循环的大小,从而取决于用户输入。

现在,我希望将此矩阵的每一行(cl_matrix)分开,并自动为每一行创建单独的向量。怎么会继续下去?我被困在这里......

到目前为止,我有:

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,:);

谢谢!

1 个答案:

答案 0 :(得分:2)

workspace变量中动态生成变量的唯一方法是通过聚合字符串和数值来构建名称(如在您的问题中),使用eval函数。

然而,eval只是远离邪恶"的一个角色,虽然它是诱人的,也是危险的。

直接使用cl_matrix和生成数组cl_1cl_7cl_15之间的可能折衷方案可能是创建structure whos { {1}}是dynamically generated

您实际上可以通过以下方式生成fields字段为structcl_1cl_7

cl_15

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

使用此方法在使用eval生成数组方面具有显着优势:您可以访问eval field(即其内容)甚至不知道他们的名字。

在下文中,您可以找到已实施此方法的脚本的修改版本。

该脚本生成两个结构:

  • 第一个,struct用于存储cl_struct_same_length
  • 的行
  • 第二个,cl_matrix用于存储不同长度的数组

在脚本中有关于如何访问fileds(即数组)以执行某些计算的示例(在示例中,用于评估每个计算的cl_struct_different_length)。

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

  • mean获取存储在其中的值
  • getfield获取字段的名称(动态生成)

更新了脚本

fieldnames

希望这有帮助。