Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab-使用字符串值索引数组_Matlab - Fatal编程技术网

Matlab-使用字符串值索引数组

Matlab-使用字符串值索引数组,matlab,Matlab,我有一个预定义的20个位置的数组,对应于我身体的20个关节。关节用字符串值标记(例如“左膝”、“头部”、“左眼”等) 我想使用附加的字符串值引用数组中的某个值。例如,我想存储观察到的关节的位置。最初,数组中的所有位置都是(-1,-1),然后如果我发现某个关节,我想做一些类似关节(“左膝”)=[100 200] 如何在Matlab中实现这一点?如何使用structs Joints.left_knee = [100 200]; Joints.head = [-1 -100]; 获取具有字

我有一个预定义的20个位置的数组,对应于我身体的20个关节。关节用字符串值标记(例如“左膝”、“头部”、“左眼”等)

我想使用附加的字符串值引用数组中的某个值。例如,我想存储观察到的关节的位置。最初,数组中的所有位置都是
(-1,-1)
,然后如果我发现某个关节,我想做一些类似
关节(“左膝”)=[100 200]


如何在Matlab中实现这一点?

如何使用
struct
s

Joints.left_knee = [100 200];
Joints.head      = [-1 -100];
获取具有
字段名的所有字段,动态引用各个条目,如下所示:

someVar = 'left_eye';
Joints.(someVar) = [200 250];
等等。如果您碰巧有多个关节,所有关节都需要相同类型的数据,但它们都属于同一个系统,您也可以制作多维结构:

Joints(1).left_knee = [100 200];
Joints(1).head      = [-1 -100];

Joints(2).left_knee = [200 450];
Joints(2).head      = [-10 -189];

Joints(3).left_knee = [-118 264];
Joints(3).head      = [+33  78];
仅向您展示一些在多维结构上下文中有用的技术:

>> someVar = 'head';
>> Joints.(someVar)     % will be expanded cell-array, 1 entry for each dimension
ans =
    -1  -100
ans =
   -10  -189
ans =
    33    78
>> [Joints.(someVar)]   % will collect those data in regular array
ans =
    -1  -100   -10  -189    33    78
>> {Joints.(someVar)}   % will collect those data in cell array
ans = 
    [1x2 double]    [1x2 double]    [1x2 double]
>> [A,B,C] = deal(Joints.(someVar));  % will assign data to 3 separate vars
A =
    -1  -100
B =
   -10  -189
C =
    33    78

键入
help struct
,了解更多信息并了解相关函数

要扩展@RodyOldenhuis解决方案,还可以将索引存储在结构数组中,并使用普通矩阵作为数据。这样,您仍然可以对所有矢量数据应用法线矩阵运算:

idx.left_knee  = 1;
idx.right_knee = idx.left_knee + 1;
idx.left_elbow = idx.right_knee+ 1;
idx.right_elbow= idx.left_elbow+ 1;

joint_pos = rand(4,8);
t = linspace(0,1,8);
joint_vel = diff(joint_pos,2)./diff(t);

joint_vel(idx.right_knee,:)
在我的示例中,我为4个关节在8个时间点的位置和速度设置了一个数据结构,以说明我的技术

我发现在使用多维数据集时,这更容易处理。当然,这取决于您的应用程序,例如,如果您只想存储常量,@RodyOldenhuis的解决方案显然要简单得多。

您可以使用内置函数将值映射到唯一键。下面是一个简单的例子:

valueSet = {[-1, 1], [2, 3], [1,5], [1,8]};
keySet = {'left_knee', 'right_knee', 'left_eye', 'right_eye'};
Joints = containers.Map(keySet,valueSet);
Joints('left_knee')

ans =
    -1     1
可以按如下方式获取贴图对象的值/键:

values(Joints)

ans = 
    [1x2 double]    [1x2 double]    [1x2 double]    [1x2 double]

keys(Joints)

ans = 
    'left_eye'    'left_knee'    'right_eye'    'right_knee'

有关更多“示例和如何”的信息,请参见。

+1很好,我不知道您可以使用字符串变量引用结构字段。