我如何表示和访问这个多值数据结构的元素?
How do I represent and access elements of this multivalued data structure?
我正在尝试实现 Brooks-Iyengar algorithm 传感器融合,并试图在 MATLAB 中表示以下数据结构。
A = {([1.5,3.2],4), ([0,2.7],5), ([0.8,2.8],4)}
我尝试执行以下操作
B = {{[1.5,3.2],4},{[0,2.7],5}}
但是我不知道如何访问每个元素,即 1.5
、3.2
和 4
以及下一组值。我从 B{1}
获得了一组元素,但之后无法获得单个值。
任何想法或指向适当链接的指示都会有所帮助。
使用当前结构,您可以简单地继续索引:
>> B{1}
ans =
[1x2 double] [4]
>> B{1}{1}
ans =
1.5000 3.2000
>> B{1}{1}(2)
ans =
3.2000
>> B{1}{2}
ans =
4
要从主结构中删除项目,您可以使用以下语法 B(1) = [];
:
>> B = {{[1.5,3.2],4},{[0,2.7],5}}
B =
{1x2 cell} {1x2 cell}
>> B(1) = []
B =
{1x2 cell}
>> B{1}
ans =
[1x2 double] [5]
>>
您也可以选择在 structure array 中表示数据(使用更好的 属性 命名):
>> s = struct('prop1',{4, 5},'prop2', {[1.5,3.2], [0,2.7]})
s =
1x2 struct array with fields:
prop1
prop2
>> s(1).prop1
ans =
4
>> s(1).prop2
ans =
1.5000 3.2000
>> s(1).prop2(2)
ans =
3.2000
要删除项目,您可以使用类似的语法:
s(1) = []
如果你想对数据元素执行一些操作,你也可以选择使用 OOP 方法,并创建一个 class 代表单个数据元素,也可以选择代表整个数据放。访问数据成员是很自然的。
如果你对使用细胞死心塌地,那么我将从 cell2mat
开始,看看是否有帮助。
vals = cell2mat(B{2}) % returns the array vals=[0 2.7 5]
您也可以从一开始就将您的数据简单地用作普通矩阵:
B = [ 1.5, 3.2, 4; 0, 2.7, 5];
然后如果您的意图是第 3 列(它们是数字),则将其用作您的键。如果键不能保证为数字,那么结构可能会有用。
编辑:我认为 DVarga 给出了更详细和有用的答案。
如果您的 MATLAB 版本足够新(即 >= R2013b),您可以为此使用 table
:
A = table([1.5,3.2; 0,2.7; 0.8,2.8],[4; 5; 4],'VariableNames',{'name1','name2'});
如您所见,结果易于检查(目视)且易于访问:
A.name1(3,2) % is 2.8000
我正在尝试实现 Brooks-Iyengar algorithm 传感器融合,并试图在 MATLAB 中表示以下数据结构。
A = {([1.5,3.2],4), ([0,2.7],5), ([0.8,2.8],4)}
我尝试执行以下操作
B = {{[1.5,3.2],4},{[0,2.7],5}}
但是我不知道如何访问每个元素,即 1.5
、3.2
和 4
以及下一组值。我从 B{1}
获得了一组元素,但之后无法获得单个值。
任何想法或指向适当链接的指示都会有所帮助。
使用当前结构,您可以简单地继续索引:
>> B{1}
ans =
[1x2 double] [4]
>> B{1}{1}
ans =
1.5000 3.2000
>> B{1}{1}(2)
ans =
3.2000
>> B{1}{2}
ans =
4
要从主结构中删除项目,您可以使用以下语法 B(1) = [];
:
>> B = {{[1.5,3.2],4},{[0,2.7],5}}
B =
{1x2 cell} {1x2 cell}
>> B(1) = []
B =
{1x2 cell}
>> B{1}
ans =
[1x2 double] [5]
>>
您也可以选择在 structure array 中表示数据(使用更好的 属性 命名):
>> s = struct('prop1',{4, 5},'prop2', {[1.5,3.2], [0,2.7]})
s =
1x2 struct array with fields:
prop1
prop2
>> s(1).prop1
ans =
4
>> s(1).prop2
ans =
1.5000 3.2000
>> s(1).prop2(2)
ans =
3.2000
要删除项目,您可以使用类似的语法:
s(1) = []
如果你想对数据元素执行一些操作,你也可以选择使用 OOP 方法,并创建一个 class 代表单个数据元素,也可以选择代表整个数据放。访问数据成员是很自然的。
如果你对使用细胞死心塌地,那么我将从 cell2mat
开始,看看是否有帮助。
vals = cell2mat(B{2}) % returns the array vals=[0 2.7 5]
您也可以从一开始就将您的数据简单地用作普通矩阵:
B = [ 1.5, 3.2, 4; 0, 2.7, 5];
然后如果您的意图是第 3 列(它们是数字),则将其用作您的键。如果键不能保证为数字,那么结构可能会有用。
编辑:我认为 DVarga 给出了更详细和有用的答案。
如果您的 MATLAB 版本足够新(即 >= R2013b),您可以为此使用 table
:
A = table([1.5,3.2; 0,2.7; 0.8,2.8],[4; 5; 4],'VariableNames',{'name1','name2'});
如您所见,结果易于检查(目视)且易于访问:
A.name1(3,2) % is 2.8000