Преобразовать ячейку строк в столбец таблицы в MATLAB - PullRequest
1 голос
/ 10 октября 2019

Я пытаюсь использовать вектор как столбец в таблице (в MATLAB). Однако я всегда получаю разные ошибки. Ниже приведен воспроизводимый пример вместе с полученными ошибками:

% What I have:
my_table = array2table(NaN(5, 3));
my_table.Properties.VariableNames = {'col_1' 'col_2' 'col_3'};
my_cell = {'a', 'b', 'c', 'd', 'e'};

% What I tried:
my_table.col_3 = my_cell; %Error: To assign to or create a variable in a table, the number of rows must match the height of the table.
my_table.col_3(1:5) = my_cell; %Error: Conversion to double from cell is not possible.
my_table.col_3.Properties.VariableTypes = {'string'}; %Error: Unable to perform assignment because dot indexing is not supported for variables of this type.

Как я могу решить эту задачу?

Ответы [ 2 ]

2 голосов
/ 10 октября 2019

Если вы хотите сохранить тип cell, вы можете использовать:

my_table.col_3 = my_cell.'

Преимущество: вы можете хранить более одного символа в каждой строке.

Почему my_table.col_3 = my_cell нене работает:

<code>%size(my_table.col_3) = <b>5x1</b>
%                       ↕ ↕
%size(my_cell)        = <b>1x5</b>

Как вы можете видеть выше, размер первого измерения вашего массива ячеек не совпадает с размером первого вашего измеренияТаблица. Таким образом, вы можете просто изменить размер вашей ячейки с помощью .'

Итак, теперь:

%size(my_table.col_3) = 5x1
%                       ↕ ↕
%size(my_cell.')      = 5x1

И Matlab (и вы) счастливы / счастливы.

1 голос
/ 10 октября 2019

Следующие работы:

my_table.col_3 = my_cell';
% or maybe you prefer
my_table.col_3 = cell2mat(my_cell)';

Давайте проанализируем ваши проблемы:

  1. Ваши размеры неверны, вам просто нужно транспонировать входные данные из строки встолбец!

  2. Как говорится, вы не можете напрямую преобразовать ячейку во что-то неявное. cell2mat это способ сделать это.

  3. Не существует такой вещи, как my_table.col_3.Properties, поэтому MATLAB запутывается и думает, что вы делаете что-то еще с этой точкой ..

...