Здесь много информации отсутствует, но я подозреваю, что ваша проблема сводится к следующим трем фактам:
Стандартный массив обязательно должен всегда содержать элементы одного и того же введите . Он не может, например, содержать «строку» в одном индексе и «число» в другом; это то, для чего предназначены массивы ячеек.
Попытка преобразовать массив ячеек, который содержит такие смешанные элементы, в стандартный массив через cell2mat, должен, в зависимости от уровня предупреждения / ошибки, либо завершиться с ошибкой, либо преобразовать все элементы в их наименьший общий знаменатель. Например, если у вас есть и «строки даты» (например, «2011-01-02»), и «числа», вероятно, они сначала будут вставлять «цифры» в виде кодов символов ascii.
Строки в октаве - это просто массивы символов. Если вы попытаетесь объединить вертикально две строки неравной длины, вы получите ошибку о несовпадающих размерах, поскольку результирующий массив в конкатенации всегда должен быть правильно прямоугольным angular.
Например, если все строки имеют одинаковый размер (обратите внимание на число c преобразование)
> c = { '2011-01-01', 98.1; '2011-01-20', 97 };
> C = cell2mat(c)
warning: implicit conversion from numeric to char
C =
2011-01-01b
2011-01-20a
Если это не так (обратите внимание на незаданную дату):
> c = { '2011-01-01'; '2011-01-2' };
> C = cell2mat(c)
error: cat: dimension mismatch
error: called from
cell2mat at line 80 column 11
Не знаю Я не знаю точную природу массива ячеек, полученного в результате вашей операции csv2cell
, но я бы поспорил, что происходит нечто подобное вышеописанному.
В общем, это, вероятно, неправильный подход для преобразования через cell2mat немедленно. Вместо этого вы, вероятно, могли бы собрать все столбцы в отдельные переменные и затем обработать их соответствующим образом либо с помощью cell2mat
, либо с помощью cellfun
подхода.