matlab - Matlab:如何将文件加载为结构数组
问题描述
我正在尝试将数据文件(这里用三行表示文件的字符串)转换为这样的结构数组:
cel = textscan('1 1.1 2 2.2 3 3.3', '%u %f');
str = cell2struct(cel, {'f1', 'f2'}, 2);
但是,现在我有一个维度为 1x1 的结构数组,其中我只能使用数组的字段访问列,但不能访问整行(如第二行的“str(2)”)。
我需要的是有一个结构数组(或如何调用它),如下所示:
str = struct('f1', {1, 2, 3}, 'f2', {1.1, 2.2, 3.3});
因为现在我可以(例如)像这样过滤它:
subStr = str(find([str.f1] > 1))
在第一种情况下我做不到。知道如何到达那里吗?最后,我能够通过以下方式做到这一点:
cel = textscan('1 1.1 2 2.2 3 3.3', '%u %f');
[f1, f2] = cel{:};
str = struct('f1', num2cell(f1'), 'f2', num2cell(f2'));
但感觉不对,恐怕会很贵(文件很大)。
编辑:
我的解决方案确实对内存要求太高,因此无法使用。典型的文件有页眉、页脚和 c。6 列 5e6 行数据。
谢谢
解决方案
如果您实际使用的是包含行的文件,则会更容易。例如,如果data.txt
包含:
1 1.1
2 2.2
3 3.3
现在您可以使用以下方法简单地加载它:
tbl = readtable('data.txt');
tbl.Properties.VariableNames = {'f1', 'f2'};
这导致更好的(恕我直言)过滤语法:
subTbl = tbl(tbl.f1 > 1, :);
我建议您阅读一些有关MATLAB 中的表的信息,以了解它们的(许多)功能。
最后,如果你坚持使用struct
数组,你可以这样做:
str = table2struct(tbl); 3×1 struct array with fields: f1 f2
推荐阅读
- php - 如何使用 MongoDb 特定运算符 $size 查找数组大小大于、小于、介于和不等于 Laravel / jenssegers 中的值?
- dashboard - 有没有办法在单独的仪表板上显示 Google Cloud Build Data?
- javascript - 如何检测类型为“function”的JS“Object”何时符合ECMA-6对“Object”的定义
- java-8 - Jboss 7.2.2 迁移中的问题
- docker - Debian 软件包 'ssmtp' 没有安装候选
- angular - 在 Angular 中拦截 HTTP 标头
- python - 在 Python 中将带有数组的嵌套 JSON 转换为 DataFrame
- c++ - 在 C++ 中返回数组返回不可访问的元素
- php - 在网站中创建 PHP 表单时遇到问题
- mysql - 在新的行排序中获取值的位置