struct - 通过“行”构建 Octave 结构
问题描述
我的意思是使用一个结构来保存一个“表”:
% Sample data
% idx idxstr var1 var2 var3
% 1 i01 3.5 21.0 5
% 12 i12 6.5 1.0 3
第一行包含字段名称。我可以直接按列输入这些数据,
ds2 = struct( ...
'idx', { 1, 12 }, ...
'idxstr', { 'i01', 'i12' }, ...
'var1', { 3.5, 6.5 }, ...
'var2', { 21, 1 }, ...
'var3', { 5, 3 } ...
);
并间接通过行,创建一个单元格数组,并转换为结构,
ds3 = cell2struct( ...
{ 1, 'i01', 3.5, 21.0, 5; ...
12, 'i12', 6.5, 1.0, 3 ...
}, { 'idx', 'idxstr', 'var1', 'var2', 'var3' }, 2 );
有没有直接按行输入数据的方法?
另外, 为什么大小不一样?
>> size(ds2), size(ds3)
ans =
1 2
ans =
2 1
解决方案
正如我在您的另一篇文章中提到的,您最好将“表”创建为数组字段的结构,而不是单行结构的数组。
但是,为了写出有用的答案,我假设您选择此表单开始的原因可能是您已经将数据作为“单元格”形式的行(例如,可能是csv2cell
操作的输出),并且您想将其转换为这样的“表格”。
因此,要从这样的数据结构创建一个漂亮的“作为数组结构的表”,您可以遵循如下策略:
Data = { 1, 'i01', 3.5, 21.0, 5; 12, 'i12', 6.5, 1.0, 3 };
d1 = struct( 'idx' , [Data{:,1}] ,
'idxstr', {{Data{:,2}}}, % note the 'enclosing' braces!
'var1' , [Data{:,3}] ,
'var2' , [Data{:,4}] ,
'var3' , [Data{:,5}]
);
或者,cell2struct
如果您更喜欢该语法,请使用:
d2 = cell2struct( { [Data{:,1}],
{Data{:,2}}, % note the lack of enclosing braces here!
[Data{:,3}],
[Data{:,4}],
[Data{:,5}] },
{ 'idx', 'idxstr', 'var1', 'var2', 'var3' },
2
);
请注意,您“确实”需要知道“列”是否表示数字或字符串数组,以便分别将其包装在 [] 或 {} 中......但我认为知道每列表示的数据类型不是程序员的不合理要求。
推荐阅读
- c++ - 改变二维向量中的一个元素会改变所有元素?
- javascript - Material-UI SimpleTable 事件处理
- bitwise-operators - 非二进制数的异或有什么作用?
- powershell - 使用 powershell(或任何软件),我如何显示监视器 ID 号
- r - 数据框之间的条件搜索、匹配和替换值
- javascript - html5
- git - macOS 上的 Git 在拉取后保留文件
- javascript - 发出帖子请求问题
- python - 在 Tensorflow 中加载预训练模型
- c# - 如何将 css 代码引用到 HtmlToImageConverter