【问题标题】:MATLAB: get min x value of struct of vectorsMATLAB:获取向量结构的最小 x 值
【发布时间】:2021-06-26 22:15:47
【问题描述】:

我有一个结构体,其中包含一个名为位置的字段,其中包含向量。 例如:

mystruct(1) = struct('position', [1,3,3])
mystruct(2) = struct('position', [2,2,0])
mystruct(3) = struct('position', [3,1,-3])

并且不使用 for 循环我想获得最小 x、y 和 z 位置 -> [1,1,-3]

这可能吗?

【问题讨论】:

  • "不使用 for 循环" 如果这些向量很大和/或它们很多,那么创建允许您在不使用循环的情况下执行此操作的中间数组将比使用更昂贵一个循环。不要害怕循环,在决定哪个更快之前,始终将矢量化方法与普通旧循环的时间进行比较,以获得有意义的用例。你会惊讶很多次。

标签: matlab struct


【解决方案1】:

也许你可以试试下面的vertcat

>> min(vertcat(mystruct.position),[],1)
ans =

   1   1  -3

在哪里

>> vertcat(mystruct.position)
ans =

   1   3   3
   2   2   0
   3   1  -3`

【讨论】:

    【解决方案2】:

    你需要get the struct field as a vector

    positions = [mystruct.position]
    % positions: [1   3   3   2   2   0   3   1  -3]
    

    然后,reshape 将该向量发送到Nx3。为行数提供一个空数组告诉 MATLAB 自动计算行数,以便我们拥有三列:

    positions = reshape(positions, [], 3)
    % positions: 
    %   1   2   3
    %   3   2   1
    %   3   0  -3
    

    然后,找到rowwise minimum

    result = min(positions, [], 2)
    % result: 
    %   1
    %   1
    %  -3
    
    

    【讨论】:

      猜你喜欢
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 2012-04-20
      • 1970-01-01
      • 2020-02-28
      相关资源
      最近更新 更多