matlab - 将单元格转换为包含文本的矩阵?

标签 matlab matrix text-processing cell-array textscan

我有包含测量数据的文本文件,标题并不那么重要,所以我用它来删除前 25 行

% Skip the first 25 lines
for i=1:25
fgetl(inputfile);
end

然后我使用分隔符来获取数据

   delimiter = '';
   values = textscan(inputfile, '%s', 'delimiter', delimiter);

我正在尝试转换由 1000 个字符组成的单元格,如下所示。 这是我得到的

'2014_11_03_17-19-49 000 430114 516672 960.91 26.2'
'2014_11_03_17-19-49 001 430112 516656 960.91 26.2'
'2014_11_03_17-19-49 002 430112 516656 960.91 26.2'
'2014_11_03_17-19-49 003 430112 516656 960.91 26.2'

我正在尝试转换由 1000 个字符组成的单元格,就像之前我只关心(960.91 和 26.2)值一样。

我尝试将其转换为矩阵,但我得到了

this error Cannot support cell arrays containing cell arrays or objects.

知道如何将这些值放入矩阵中以绘制它们。

最佳答案

方法#1

您可以使用漂亮的 importdata 这里 -

lines_skip = 25;
values = importdata(inputfile,' ',lines_skip) %// using the delimiter ' ' here

values 将是一个保存来自 inputfile 的数据的结构。

因此,第四列将是values.data(:,4),而values.data(:,5)将是第五个如下所示 -

>> values.data(:,4)
ans =
  960.9100
  960.9100
  960.9100
  960.9100
>> values.data(:,5)
ans =
   26.2000
   26.2000
   26.2000
   26.2000

方法#2

如果您已经拥有问题中列出的元胞数组,则无需担心再次读取输入文件。所以,你有这样的东西 -

incell = {
    '2014_11_03_17-19-49 000 430114 516672 960.91 26.2'
    '2014_11_03_17-19-49 001 430112 516656 960.91 26.2'
    '2014_11_03_17-19-49 002 430112 516656 960.91 26.2'
    '2014_11_03_17-19-49 003 430112 516656 960.91 26.2'}

接下来,您可以将 cellfunregexp 结合使用,使用分隔符 ' ' -

将每个单元格拆分为列
cellarr = cellfun(@(x) regexp(x,' ','Split'),incell,'un',0)
values = vertcat(cellarr{:})

这会让你 -

values = 
    '2014_11_03_17-19-49'    '000'    '430114'    '516672'    '960.91'    '26.2'
    '2014_11_03_17-19-49'    '001'    '430112'    '516656'    '960.91'    '26.2'
    '2014_11_03_17-19-49'    '002'    '430112'    '516656'    '960.91'    '26.2'
    '2014_11_03_17-19-49'    '003'    '430112'    '516656'    '960.91'    '26.2'

也就是说,values 中的第五列和第六列将是您在将 str2double 包裹起来后想要获得的数据:str2double(values(:, 5))str2double(values(:,6))

关于matlab - 将单元格转换为包含文本的矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26741790/

相关文章:

matlab - Matlab eig 是否总是返回排序值?

python - block 三对角矩阵python

matlab - Matlab 中的结构到单元格(或矩阵)

unix - Unix 中的日志解析器/分析器

matlab - 最优性准则法

matlab - 旋转矩阵不正交

matlab - 如何在给定的 voronoi 图中找到交点

python - 从每个列表中删除第三个元素和第二个元素,并查找二维列表中最后一个元素在特定范围内的列表

string - 元胞数组,为每个字符串添加后缀

string - 循环字符串中的字符,NewLISP