在workspace
变量中动态生成变量的唯一方法是使用eval
函数通过汇总字符串和数字值构建名称(如您的问题)。
尽管如此,eval
是只有一个字符远离“邪恶”的,诱人的,因为它是和危险的,因为它是为好。
之间与cl_matrix
直接工作,并产生所述一组阵列cl_1
,cl_7
和cl_15
可以创建一个structure
卫生组织fields
是dynamically generated一种可能的折衷。
实际上,你可以生成一个struct
卫生组织场均cl_1
,cl_7
和cl_15
这样:
cl_struct.(['cl_' num2str(Angle(i))])=cl_matrix(i,:)
(您可能会注意到的字段名称,如cl_1
,你可以通过生成同样的方式产生使用eval
)。
使用这种方法通过使用eval
提供了一个显着的优势,相对于阵列的一代:您可以访问到field
OD的struct
(也就是他们的内容),甚至不知道他们的名字。
在下面,你可以在其中找到这种方法已经实现你的脚本的修改版本。
脚本生成两个结构:
- 第一个,
cl_struct_same_length
用于存储的cl_matrix
- thesecond一个行,
cl_struct_different_length
用于不同长度的存储阵列
在脚本中有关于如何访问文件(即数组)以执行一些计算的示例(在该示例中,用于评估每个文件的mean
)。
您可以通过使用功能接入到结构域:
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))]))
希望这有助于。
不清楚你在问什么。为什么矩阵不连续? – natario
你为什么要这么做?这是非常糟糕的做法,只会导致未来更令人头痛。你有一个完美可用的矩阵,具有明智的索引:我建议你使用它。 – beaker
由于尺寸变化,它取决于“角度”的长度。因此,输出矢量的量变化 –