【问题标题】:Find local mimimum in 2D np.array in Python在 Python 中查找 2D np.array 中的局部最小值
【发布时间】:2020-01-16 09:44:36
【问题描述】:

我有这个两列数组:

A  | 1 
A  | 2
A  | 3
B  | 4
B  | 5
B  | 6

其中 A、B 是常数。我想要的是找到每个参数 A 和 B 的最小值,所以这个操作的结果将是另一个像这样的二维数组:

A | 1
B | 4

当只有一个常数 A 存在时,我成功地找到了最小值:

MIN = np.where(arr == np.amin(arr[:,1]))
output = arr[MIN[0],:]
>> output = A | 1

但是当数组比这更复杂时,我无法自动化它。谢谢您的帮助。

【问题讨论】:

    标签: python arrays numpy sorting


    【解决方案1】:

    您可以使用np.unique 从第一列中提取唯一值,然后沿第一轴使用布尔掩码:

    np.stack([(x, a[a[:, 0] == x, 1].min()) for x in np.unique(a[:, 0])])
    

    或者,如果您可以访问pandas,您可以创建一个DataFrame并在第一列使用grouby

    import pandas as pd
    
    result = pd.DataFrame(a).groupby(0).min().values
    

    用于设置a的代码:

    import numpy as np
    
    a = np.array([[1, 1, 1, 2, 2, 2],
                  [1, 2, 3, 4, 5, 6]]).T
    

    【讨论】:

    • 好的,谢谢!有没有一种快速的方法来访问初始数组 a 中解决方案的索引?我需要这些来构建作为我的问题中的解决方案呈现的数组。
    • @aGingerGuy 您可以在数组中添加一个额外的索引列,或者类似地在列表理解中屏蔽索引(并使用 argmin)。但是在您的问题中,您使用A, 1 表示一个数组,即不采用索引而是第一列。
    【解决方案2】:

    您要查找的是函数np.min 中的可选关键字axis。它允许您按列计算数组的最小值。 使用np.min 也比使用np.amin 更好,因为它允许您在结果之前执行更少的步骤(您立即拥有最小值而不是表中的索引)

    试试这个:

    import numpy as np
    
    a = np.array([[1,2,3], [4,5,6]])
    np.min(a, axis=1)
    # Result : array([1, 4])
    

    【讨论】:

    • 当我在我的两列数组上执行此操作时,它会打印第二个参数的每个值。当我更改为“axis = 0”时,它会打印出第二列的最小值,与参数 A 和 B 无关
    • 你的数组到底是什么形状
    猜你喜欢
    • 2020-10-25
    • 2012-08-27
    • 2021-01-13
    • 2019-01-03
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 2021-09-26
    • 2012-12-28
    相关资源
    最近更新 更多