cell2mat исключает столбец из массива ячеек при выполнении преобразования - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть следующий код:

% Code to import data from .csv files into cell arrays called strain_trans_data, strain_ax_data, and load_data

strain_trans_data = cell2mat(strain_trans_data);
strain_trans_data = strain_trans_data*-1; % trans strain to -trans strain
strain_ax_data = cell2mat(strain_ax_data);
load_data = cell2mat(load_data);
new_trans_data = [];
new_ax_data = [];
new_load_data = [];
regressions = {'File name','y-int axial','slope axial','y-int trans','slope trans','v'};

% Rest of the code...

Код импортирует данные из некоторых CSV-файлов, которые я анализирую, выполняя линейную регрессию. Чтобы выполнить линейную регрессию и построить данные, мне нужно преобразовать массивы ячеек в матрицы. Когда я импортирую много данных (из более чем 10 .csv, в моем случае у меня 11 файлов), strain_trans_data = cell2mat(strain_trans_data); и strain_ax_data = cell2mat(strain_ax_data); работают нормально, они просто конвертируют массивы ячеек в матрицы. Поскольку существует 11 наборов данных, массивы ячеек равны nx11, а окончательные матрицы - nx11.

По какой-то причине load_data = cell2mat(load_data); вместо этого удаляет один столбец, поэтому начальный массив ячеек равен nx11, а конечная матрица - nx10. Я пробовал с другими наборами данных (меньше 10), и эта проблема, кажется, возникает только в этом случае. Странно то, что и strain_trans_data = cell2mat(strain_trans_data);, и strain_ax_data = cell2mat(strain_ax_data); работают нормально, проблема возникает только при последнем преобразовании. Есть идеи, почему это может происходить?

Редактировать: я попытался войти в функцию cell2mat, чтобы увидеть, что происходит, и нашел шаг, где возникает проблема. На изображении ниже m это nx11 cell

Everything is fine

тогда по какой-то причине он меняется на nx10 double. Может ли быть проблема с данными в массиве ячеек?

What happened?

1 Ответ

0 голосов
/ 11 сентября 2018

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

Я могу воспроизвестиВаша проблема такова:

C = num2cell(magic(4));
[C{:,3}] = deal([]);

C теперь выглядит так:

C =
  4×4 cell array
    [16]    [ 2]    []    [13]
    [ 5]    [11]    []    [ 8]
    [ 9]    [ 7]    []    [12]
    [ 4]    [14]    []    [ 1]

Теперь мы применяем cell2mat:

A = cell2mat(C);

Aвыглядит следующим образом:

A =
    16     2    13
     5    11     8
     9     7    12
     4    14     1

C как массив ячеек 4x4, A - числовой массив 4x3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...