我试图找到结构的最大值,但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
答案 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