Октава: я получаю ошибку измерения: cat: несоответствие измерения при выполнении cell2mat - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть массив ячеек (ячейка класса) с измерением, которое я пытаюсь преобразовать в double. Я получаю ошибку измерения при использовании cell2mat. (строка 1 и кол 1 не являются цифрами c)

debug> `class(mycsvdata)`
ans = cell

CCC=cell2mat(mycsvdata(2:end,2:end))
error: cat: dimension mismatch
error: called from
cell2mat at line 80 column 11
leesCsvPuur at line 7 column 2
verwerkStooq at line 37 column 8
handleStooq at line 77 column 1
testinvoer03 at line 72 column 1

debug> `size(mycsvdata)`
ans =
   9   7

Я пробовал cell2mat:

debug> `cell2mat{1 2 3; 4 5 6}`
ans =
   1   2   3
   4   5   6

Буду признателен любой совет.

1 Ответ

1 голос
/ 28 февраля 2020

Здесь много информации отсутствует, но я подозреваю, что ваша проблема сводится к следующим трем фактам:

  1. Стандартный массив обязательно должен всегда содержать элементы одного и того же введите . Он не может, например, содержать «строку» в одном индексе и «число» в другом; это то, для чего предназначены массивы ячеек.

  2. Попытка преобразовать массив ячеек, который содержит такие смешанные элементы, в стандартный массив через cell2mat, должен, в зависимости от уровня предупреждения / ошибки, либо завершиться с ошибкой, либо преобразовать все элементы в их наименьший общий знаменатель. Например, если у вас есть и «строки даты» (например, «2011-01-02»), и «числа», вероятно, они сначала будут вставлять «цифры» в виде кодов символов ascii.

  3. Строки в октаве - это просто массивы символов. Если вы попытаетесь объединить вертикально две строки неравной длины, вы получите ошибку о несовпадающих размерах, поскольку результирующий массив в конкатенации всегда должен быть правильно прямоугольным 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 подхода.

...