【问题标题】:Fastest way to find two minimum values in each column of NumPy array在 NumPy 数组的每一列中找到两个最小值的最快方法
【发布时间】:2020-09-14 19:03:38
【问题描述】:

如果我想在 NumPy 数组的每一列中找到最小值,我可以使用 numpy.amin() 函数。但是,有没有办法在每列中找到两个最小值,比对每列进行排序更快?

【问题讨论】:

    标签: numpy min


    【解决方案1】:

    您可以简单地在列中使用np.partition 来获得最小的N 数字-

    N = 2
    np.partition(a,kth=N-1,axis=0)[:N]
    

    这实际上并没有对整个数据进行排序,只是分成两个部分,这样最小的 N 个数字位于第一个 部分,也称为partial-sort

    奖励(获得前 N 个元素): 同样,要获得每列的前 N 数字,只需使用负的 kth 值 -

    np.partition(a,kth=-N,axis=0)[-N:]
    

    沿其他轴和更高暗度阵列

    要沿其他轴使用它,请更改 axis 值。因此,沿行,二维数组将是axis=1,对于更高维度的 ndarray 以相同的方式扩展。

    【讨论】:

      【解决方案2】:

      使用 min() 方法,并指定要平均的轴:

      a = np.random.rand(10,3)
      a.min(axis=0)
      

      给予:

      array([0.04435587, 0.00163139, 0.06327353])
      
      
      a.min(axis=1)
      

      给予

      array([0.01354386, 0.08996586, 0.19332211, 0.00163139, 0.55650945,
             0.08409907, 0.23015718, 0.31463493, 0.49117553, 0.53646868])
      

      【讨论】:

      • 问题是,我想要每列的两个最小值,而不仅仅是每列的最小值。我不想对每一列进行排序,因为这在计算上似乎太昂贵了。我不知道 NumPy 的分区函数,这正是我需要的。
      • 啊好吧 - 明白了!
      猜你喜欢
      • 2016-03-07
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 2015-07-04
      • 2021-03-30
      • 1970-01-01
      相关资源
      最近更新 更多