cell2mat在执行转换时从单元格数组中删除列

问题描述 投票:1回答:1

我有以下代码:

% 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?

matlab matrix cell-array
1个回答
0
投票

无法看到你输入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数字阵列。

© www.soinside.com 2019 - 2024. All rights reserved.