我有以下代码:
% 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
然后由于某种原因它变成了nx10 double
。单元数组中的数据可能有问题吗?
无法看到你输入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数字阵列。