Arrays 单元阵列到矩阵阵列的Matlab变换

Arrays 单元阵列到矩阵阵列的Matlab变换,arrays,matlab,loops,for-loop,Arrays,Matlab,Loops,For Loop,我构建了一个脚本(来自我工作组的不同脚本)来从文件夹中读取数据。问题是最后我得到了一个带有1x49单元的数据数组。我需要矩阵数组中的数据,以便使用matlab绘制瀑布图 我需要的最后一个矩阵在第一列中有变量“wave”,从第2列到第I列(我的数据数组中的单元格数)是我的数据数组中的数据 我不知道如何进入单数组字段 这是我为获取数组中的数据而编写的: clc;clear; selpath = uigetdir; filelist = dir(selpath); filelist

我构建了一个脚本(来自我工作组的不同脚本)来从文件夹中读取数据。问题是最后我得到了一个带有1x49单元的数据数组。我需要矩阵数组中的数据,以便使用matlab绘制瀑布图

我需要的最后一个矩阵在第一列中有变量“wave”,从第2列到第I列(我的数据数组中的单元格数)是我的数据数组中的数据

我不知道如何进入单数组字段

这是我为获取数组中的数据而编写的:

clc;clear;      
selpath = uigetdir; 
filelist = dir(selpath);  
filelist = {filelist.name};
filter = cellfun(@(u) contains(u, '.txt'),filelist);    

data = []; 
for i = 1:numel(filelist)   
    filename = filelist{i};
    filename = [selpath '/' filename];
    delimiter = '\t';

    formatSpec = '%q%q%q%q%q%q%q%[^\n\r]';
    fileID = fopen(filename,'r');
    dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'TextType', 'string',  'ReturnOnError', false);
    fclose(fileID);
    tmp_data =(dataArray{1});
    data{i} = tmp_data; 
 end
有什么聪明的方法进入循环吗?或者我需要一个新的循环来转换它

我试了一下:
data=cell2mat(数据)

但这并不能改变我的数据

编辑:这是我的一个文件的外观:

Data from cystein_21101181_01.txt Node

Date: Thu Apr 08 12:37:33 CEST 2021
User: admin
Spectrometer: 211-0118
Scans to average: 16
cleanPeaks enabled: false
laserRefSpectrum enabled: true
Raster (0) enable: true
Integration Time (sec): 1.000000E0
XAxis mode: Raman Shifts
Number of Pixels in Spectrum: 1152
>>>>>Begin Spectral Data<<<<<
201.679 783.5
203.772 813.94
205.865 825.62
207.956 843
210.046 860.44
212.135 882.44
214.223 900.25
216.311 912.31
来自cystein_21101181_01.txt节点的数据 日期:2021年4月8日星期四12:37:33 用户:管理员 光谱仪:211-0118 平均扫描次数:16次 已启用的清除峰值:false laserRefSpectrum已启用:真 光栅(0)启用:真 积分时间(秒):1.000000E0 X轴模式:拉曼位移 光谱中的像素数:1152
>>>>>开始光谱数据鉴于所有文件都具有相同的结构,我认为最好使用
readtable()


所有
数据{i}
的维度是否相同?为什么cell2mat不工作?为什么首先要创建单元而不是矩阵?如果没有一个最小的可复制示例,我们就不可能帮助您。只需尝试执行
a=[dataArray{1}]
,看看您是否获得了所需的数组。如果可能,
[]
括号将单元格数组阻尼为数组。如果您想要特定的单元格,您可以
[somedata{2:5}]
等…@MatteoV是的
数据{i}
具有所有相同的维度。但当我尝试它时,我得到了一个错误:CELL2MAT不支持包含单元格数组或对象的单元格数组。这是我代码的开始。你需要我用脚本导入的文件吗?我将编辑文章并添加我的一个文件的内容。所有文件都是这样的,只是数据来自不同的光谱仪。@bla如果我尝试
a=[dataArray{1}]
我会得到数据数组的第一列。这很有效。所以我发现我犯了一个错误。因此,我总是导入文件的第一列,但我还需要第二行。也许CELL2MAT不工作,因为文件开头有文本?谢谢你的代码。我试过了,但在我的最后一个矩阵中,我得到了NaN。这段代码在你提供的小示例中对我有效。如果您只得到NAN,我怀疑这可能是因为实际文件的结构可能会有所不同,在这种情况下,应该修改一些设置。你能试着将代码应用到这个小的示例文件中,并检查它是否在上面工作吗?我复制了代码,它工作了。谢谢
% The start is the same as before
clc;clear;      
selpath = uigetdir; 
filelist = dir(selpath);
filelist = {filelist.name};
filter = cellfun(@(u) contains(u, '.txt'),filelist);    

data = []; 

% Initialize the settings to read your files
opts = delimitedTextImportOptions("NumVariables", 2);
opts.DataLines = [14, Inf]; % Skip the first 13 header lines
opts.Delimiter = " "; % data columns are delimited by spaces
opts.VariableTypes = ["double", "double"]; % specify the variable type for your each columns
opts.ExtraColumnsRule = "ignore"; % ignore any other column
opts.EmptyLineRule = "read"; % read lines even if they're empty
opts.ConsecutiveDelimitersRule = "join"; % treat multiple spaces as only one delimiter
opts.LeadingDelimitersRule = "ignore"; % ignore leading spaces

% Now loop through your files
for i = 1:numel(filelist)
    filename = filelist{i};
    filename = [selpath '/' filename];

    % Read the file and append the data to your array
    data = [data; table2array(readtable(filename, opts))];
    % or maybe? unsure what your wanted:
    % data{i} = table2array(readtable(filename, opts));
end