返回单元格数组中结构参数的所有值。

1查看(最近30天)
格雷戈里·比尔
格雷戈里·比尔 于2021年2月3日
评论道: 马特·J 2021年2月4日
我有一个包含多个嵌入结构的单元格数组(21x1),这样我想要的信息就可以在myCell{1,1}. pose . position . x .(value_here)中找到。每个单元阵列具有相同的结构。是否有一种方法可以返回这个21x1单元格数组中的所有X值,而不必使用for循环?我想在某个地方使用':'运算符,但无法找出它(我不是matlab专家,所以可能是一些明显的东西,我错过了或可能只是不可能)。
3评论
马特·J
马特·J 2021年2月4日
是否有一种方法可以返回这个21x1单元格数组中的所有X值,而不必使用for循环?
当你的数组很小的时候,你是否有理由认为你需要避免for循环?我怀疑你会注意到for循环和下面的任何答案之间的速度差异。

登录评论。

答案(2)

马特·J
马特·J 2021年2月4日
tmp = [mycell {:}];
tmp = [tmp.Pose];
tmp = [tmp.Position];
X = [tmp.X];

Cam Salzberger.
Cam Salzberger. 2021年2月4日
你好,格雷戈里,
Matt J的方式通过创建多个结构阵列,从而在嵌套字段下工作。这是功能性的,但不是很快,因为您每次都创建新的阵列,除非您将在该级别访问所有数据。
另一方面,这对cellfun来说是完美的:
x = cellfun(@(c) c.姿势。位置。X, myCell);
当您访问的字段总是包含标量数据时,这种方法非常有效。如果它包含向量数据,或文本,你必须使用'UniformOutput',false,这将输出另一个单元格数组。
如果您关心性能,那么创建一个本地函数来一次处理深度嵌套消息中所有数据的访问可能会更快。喜欢的东西:
[x,y,z] = Cellfun(@Extractpose,MyCell);
功能[x, y, z] =提取
%从geometry_msgs/PoseStamped消息中提取姿势坐标
pos = msg.Pose.Position;
x = pos.X;
y = pos.y;
z = pos.Z;
结束
这就是深度嵌套消息对象的情况 .我不确定它是否适用于消息结构。
凸轮

标签

下载188bet金宝搏

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!