在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
由於尺寸變化,它取決於「角度」的長度。因此,輸出矢量的量變化 –