Cell2mat возвращает ошибку: cat: несоответствие размеров - PullRequest
0 голосов
/ 21 октября 2019

У меня большой массив ячеек размером 1311114x2. Выдержка из моих данных выглядит следующим образом.

Rotation angle  Measured distance
-358,506    26,992
-358,758    26,993
-359,010    26,992
-359,262    26,993
-359,514    26,992
-359,766    26,992
-0,018  26,993
-0,270  26,991
-0,522  26,992
-0,774  26,992
-1,044  26,993
-1,296  26,992

Для создания выходной переменной я использую функцию cell2mat

data = [cell2mat(raw(:,1)), cell2mat(raw(:,2))];

и получаю следующее сообщение об ошибке.

error: cat: dimension mismatch
error: called from
    cell2mat at line 80 column 11
    Cloud_reconstruction at line 102 column 6

Есть ли у кого-нибудьидея, как решить эту проблему?

1 Ответ

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

Я предполагаю, что значения в вашем массиве ячеек raw являются строками (или символьными массивами). Поскольку эти строки имеют различную длину, требуемая конкатенация не будет работать, как указано в сообщении об ошибке.

Вы можете использовать функцию str2num в Octave для преобразования строк в числовые значения. Это не будет работать из коробки, так как у вас также есть запятые в ваших строках. Кажется, это десятичные разделители. Вам необходимо заменить эти запятые, например, используя метод Octave strrep. С помощью метода cellfun Октавы вышеупомянутые функции могут применяться ко всем элементам массива ячеек.

Вот мое решение:

raw = {
  '-358,506',    '26,992';
  '-358,758',    '26,993';
  '-359,010',    '26,992';
  '-0,018',      '26,993'
}

data = cellfun(@(x)str2num(x), strrep(raw, ',', '.'))

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

  raw =
  {
    [1,1] = -358,506
    [2,1] = -358,758
    [3,1] = -359,010
    [4,1] = -0,018
    [1,2] = 26,992
    [2,2] = 26,993
    [3,2] = 26,992
    [4,2] = 26,993
  }

  data =

    -358.506000    26.992000
    -358.758000    26.993000
    -359.010000    26.992000
      -0.018000    26.993000

Надеюсь, это поможет!

...