Единственный способ динамически генерировать переменные переменных workspace
имя whos создается путем объединения строковых и числовых значений (как в вашем вопросе), чтобы использовать функцию eval
.
Тем не менее, eval
- это только один символ, далекий от «злого», соблазнительный, как он есть, и опасный, как и он.
Возможный компромисс между непосредственно работает с cl_matrix
и генерации набора массива cl_1
, cl_7
и cl_15
можно было бы создавая structure
Whos fields
являются dynamically generated.
Вы действительно можете создать поле с struct
WHOS являются 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
- 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
Поскольку размер изменяется, это зависит от длины «Угол». Следовательно, количество выходных векторов изменяется –