MATLAB查找最大值一个结构

时间:2012-11-27 00:28:11

标签: matlab octave

我试图找到结构的最大值,但max([tracks(:).matrix])不起作用。它给我以下错误:“使用horzcat时出错 CAT参数维度不一致。“你有想法吗?

以下是我的结构:

tracks = 

1x110470 struct array with fields:
    nPoints
    matrix

tracks.matrix包含3D点。例如,这是

tracks(1,2).matrix:

33.727467   96.522331   27.964357
31.765503   95.983849   28.984663
30.677082   95.989578   29

3 个答案:

答案 0 :(得分:4)

您可以使用数组乐趣,然后使用另一个max来执行此操作:

s.x = [1 3 4];
s(2).x = [9 8];
s(3).x = [1];

maxVals = arrayfun(@(struct)max(struct.x(:)),s);

maxMaxVals = max(maxVals(:));

或者,如果你想在MAX之后保留.x的大小:

s.x = [1 3 4];
s(2).x = [9 8 3];
s(3).x = [1 2 2; 3 2 3];

maxVals = arrayfun(@(struct)max(struct.x,[],1),s,'uniformoutput',false);

maxMaxVals = max(cat(1,maxVals{:}))

或者,如果你知道一切都是n x 3

s.x = [1 3 4];
s(2).x = [9 8 3];
s(3).x = [1 2 2; 3 2 3];
matrix = cat(1,s.x)
maxVals = max(matrix)

答案 1 :(得分:2)

我不确定你想要找到的最大值,但你可以这样做:

matrixConcat = [tracs.matrix]

将为您提供所有矩阵的大型连接列表。然后,您可以执行最大操作以找到最大值。

如果这是你正在寻找的,请告诉我,否则我会改变我的答案。

答案 2 :(得分:1)

您无法使用[]因为所有tracks.matrix的大小不同,因此连接失败。

可以然而使用{}连接到单元格:

% example structure
t = struct(...
    'matrix', cellfun(@(x)rand( randi([1 5])), cell(1, 30), 'uni', 0))


% find the maximum of all these data    
M = max( cellfun(@(x)max(x(:)), {t.matrix}) );

现在,如果您不想找到总体最大值,但每列最大值(假设您在每列中都有(x,y,z)坐标),那么您应该

% example data
tracks = struct(...
    'matrix', {rand(2,3) rand(4,3)})

% compute column-wise max 
M = max( cat(1, tracks.matrix) )

这是有效的,因为当tracks.matrix是多维结构时调用tracks等于扩展单元格数组的内容:

tracks.matrix         % call without capture equates to:

C = {tracks.matrix};  % create cell
C{:}                  % expand cell contents