【问题标题】:Matlab: Find minimum value from a set of values for each column in an arrayMatlab:从数组中每一列的一组值中找到最小值
【发布时间】:2014-11-04 05:02:37
【问题描述】:

我有一个二维数组A=zeros(1000,1024)。我想迭代计算第 i 行(i=1-999)的每个值与第 1000 行的值之间的差异。

现在我想循环遍历 1-999 行,计算当前行和第 100 行的差异并将其存储在单独的数据结构中 (B=zeros(999,1024))。之后,我使用另一个 for 循环计算每列的最小值,该循环遍历 B 的列。

您知道更有效、更快的方法吗?

【问题讨论】:

    标签: arrays matlab minimum


    【解决方案1】:

    试试这个 -

    min(bsxfun(@minus,A(1:999,:),A(1000,:)),[],1)
    

    看来你想从最后一行中减去,所以你可以让它通用-

    min(bsxfun(@minus,A(1:end-1,:),A(end,:)),[],1)
    

    【讨论】:

    • +1 但我认为min(bsxfun(@minus,A(1:end-1,:),A(end,:)),[],1) 更适合这个问题
    • 你需要,[],1吗?
    • @Dan 这是为了防止min 在只有一行的情况下继续工作
    • @Dan 有点养成了指定维度以避免混淆的习惯。
    • @LuisMendo Dan 的建议也有效,但这些天我正在尝试一种更安全的做法 :)
    【解决方案2】:

    这是bsxfun 的经典用例:

    M = rand(1000,1024);
    V = M(end,:);
    
    MminusV = bsxfun(@minus, M(1:end-1,:), V);
    
    min(MminusV)
    

    【讨论】:

    • 我的解决方案实际上是错误的,因为我将最后一行包含在 bsxfun 中。现在它是正确的,但和你的一样:)
    • @Divakar 但 Luis' 击败了他们 ;)
    【解决方案3】:

    如果你只想要每列的最小值,你可以通过在最后做减法来节省很多操作:

    min(A(1:end-1,:),[],1) - A(end,:)
    

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 2018-04-18
      • 2020-05-25
      • 2016-02-12
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 2022-01-23
      • 2017-03-22
      相关资源
      最近更新 更多