我正在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,:);
谢谢!
答案 0 :(得分:2)
在workspace
变量中动态生成变量的唯一方法是通过聚合字符串和数值来构建名称(如在您的问题中),使用eval
函数。
然而,eval
只是远离邪恶"的一个角色,虽然它是诱人的,也是危险的。
直接使用cl_matrix
和生成数组cl_1
,cl_7
和cl_15
之间的可能折衷方案可能是创建structure
whos { {1}}是dynamically generated。
您实际上可以通过以下方式生成fields
字段为struct
,cl_1
和cl_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
希望这有帮助。