【问题标题】:Translating max function in MatLab to numpy将 MatLab 中的 max 函数转换为 numpy
【发布时间】:2019-11-02 05:37:19
【问题描述】:

我想把下面的 MatLab 代码翻译成 Numpy。

% MatLab
[selVals, colAssignment] = max(A, [], 2);

根据 Numpy 网站上的 NumPy for Matlab 用户指南,转换 max(..., [], 2) 的语法是

# Numpy
selVals = A.max(1)

但是,这只是给出了 selVals 的 numpy 等价物。它没有给出 colAssignment。我如何在 Numpy 中获得 colAssignment?

【问题讨论】:

    标签: python matlab numpy max


    【解决方案1】:

    你不能在一个函数调用中做到这一点。要获取colAssignment,请致电argmax

    setVals = A.max(axis=1)
    colAssignment = A.argmax(axis=1)
    

    根据A的大小,先获取colAssignment,然后用它从A中提取最大值可能会更高效:

    colAssignment = A.argmax(axis=1)
    setVals = A[np.arange(len(A)), colAssignment]
    

    【讨论】:

      【解决方案2】:

      假设 A 是一个 numpy 数组,您可以在一行代码中完成。

      selVals, colAssignment = A.max(axis=1), A.argmax(axis=1)
      

      或者:

      colAssignment = A.argmax(axis=1) #index
      selVals = A[:, colAssignment] #value
      

      【讨论】:

      • 仅供参考:selVals = A[:, colAssignment] 给出的结果与 Matlab 代码不同。它创建一个二维数组,其中包含包含每行最大值的完整列。请参阅我的答案,了解如何获得最大值。
      • 感谢@WarrenWeckesser。我也赞成你的回答。我将第一个标记为答案。
      • @WarrenWeckesser 我投票支持出现在列表顶部的答案。这不是按时间顺序排列的第一个答案吗?如果我做错了,我深表歉意。
      • 不,它不是按时间顺序排列的。我认为这是随机的。
      【解决方案3】:

      对于多维列表,你可以这样做:

      a = [[0, 1, 2],
           [3, 4, 5],
           [0,7,8],
           [9,10,11],
           [0, 1, 2],
           [1, 4, 5],
           [0,17,8],
           [9,5,1],
           [15,7,8]]
      
      selVals, colAssignment = np.array(a).max(0), np.array(a).argmax(0)
      
      # output 
      # selVals = array([15, 17, 11]), colAssignment= array([8, 6, 3]))
      # The first array contains maximum numbers in each column and the second array its indexes
      

      【讨论】:

        猜你喜欢
        • 2015-01-18
        • 1970-01-01
        • 2020-10-10
        • 2014-03-05
        • 2013-05-13
        • 2016-11-07
        • 2012-06-15
        • 1970-01-01
        相关资源
        最近更新 更多