Как я могу изменить тип данных поля в структурном массиве?

У меня есть структурный массив 2417 на 50 в MATLAB, и я пытаюсь найти векторизованный способ преобразования некоторых типов полей:

  1. У меня есть столбец символов, которые я хочу преобразовать в строковый тип:

    [DataS.Sector] = string([DataS.Sector]);
    

    но это не работает. Я не хочу использовать цикл, так как это занимает так много времени.

  2. Та же проблема, но преобразование в числовые значения. Прямо сейчас я использую цикл, который занимает очень много времени:

    for i = 1:length(DataS)
      for j = 1:numel(Vectorpour)
        DataS(i).(DataSfieldname{k}) = str2double(DataS(i).(DataSfieldname{k}))
      end
    end
    

Как я могу векторизовать каждый из этих подходов?

1 ответ

Вы можете выполнить оба этих преобразования для всех элементов массива структуры, захватив значения полей в массиве ячеек, выполнив преобразование (используя string или же str2double), преобразовывая результат в массив ячеек, используя num2cell затем перезаписываем исходные поля, используя список через запятую:

% For part A:
temp = num2cell(string({DataS.Sector}));
[DataS.Sector] = temp{:};

% For part B:
temp = num2cell(str2double({DataS.(DataSfieldname{k})}));
[DataS.(DataSfieldname{k})] = temp{:};
Другие вопросы по тегам