2

我正在尝试实现用于传感器融合的Brooks-Iyengar 算法,并尝试在 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.53.2以及4下一组值。我从 中获得一组元素B{1},但之后无法获得各个值。

任何指向适当链接的想法或指针都会有所帮助。

4

3 回答 3

4

使用当前结构,您可以简单地继续索引:

>> 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]

>> 

您还可以选择在结构数组中表示数据(使用更好的属性命名):

>> 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 方法,并创建一个表示单个数据元素的类,也可以创建一个表示整个数据集的类。访问数据成员是很自然的。

于 2017-03-23T13:04:02.253 回答
2

如果您的 MATLAB 版本足够新(即 >= R2013b),您可以使用 a 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
于 2017-03-23T13:30:49.400 回答
1

如果您对使用单元格不屑一顾,那么我会先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 给出了更详细和有用的答案。

于 2017-03-23T13:27:40.600 回答