Функция для преобразования массива разнородных переменных в структуру (сохранение имени) - PullRequest
2 голосов
/ 08 мая 2019

Я хочу написать функцию, которая преобразует переменную количество переменных (в примере ниже массива sc, матрица A, число T) в структуру, которая содержитих.Соответствующие метки структуры должны быть именами самих переменных.См. Пример ниже:

sc=[1 2 1 0.5 0.01 0.03];
A=[1,2,3,4;1,2,3,4];
T=2;

Я хочу, чтобы моя функция делала это:

data.sc=sc;
data.A=A;
data.T=T;

, чтобы вывод был:

data =

структура с полями:

sc: [1 2 1 0.5000 0.0100 0.0300]
 A: [2×4 double]
 T: 2

для переменной количество разнородных аргументов.

1 Ответ

6 голосов
/ 08 мая 2019

Вы можете использовать функцию inputname в сочетании с динамическими именами полей .

function outStruct =  dataStructifier(varargin)
    outStruct = struct;
    for k = 1:nargin
        outStruct.(inputname(k)) = varargin{k};
    end
end

В результате:

sc=[1 2 1 0.5 0.01 0.03];
A=[1,2,3,4;1,2,3,4];
T=2;

data = dataStructifier(sc, A, T)

data = 

  struct with fields:

    sc: [1 2 1 0.5000 0.0100 0.0300]
     A: [2×4 double]
     T: 2

Обратите внимание, что функция вызовет ошибку при предоставлении «безымянных переменных», например:

data = dataStructifier(sc, A, T, ones(10))
...