在Python中的2D np.array中查找局部最小值
我有两列数组:在Python中的2D np.array中查找局部最小值,python,arrays,numpy,sorting,Python,Arrays,Numpy,Sorting,我有两列数组: A | 1 A | 2 A | 3 B | 4 B | 5 B | 6 其中A,B是常数。我想要的是找到每个参数A和B的最小值,所以这个操作的结果将是另一个2D数组,如下图所示: A | 1 B | 4 当只有一个常数A存在时,我成功地找到了最小值: MIN = np.where(arr == np.amin(arr[:,1])) output = arr[MIN[0],:] >> output = A | 1 但当阵列比这更复杂时,我无法将其自动
A | 1
A | 2
A | 3
B | 4
B | 5
B | 6
其中A,B是常数。我想要的是找到每个参数A和B的最小值,所以这个操作的结果将是另一个2D数组,如下图所示:
A | 1
B | 4
当只有一个常数A存在时,我成功地找到了最小值:
MIN = np.where(arr == np.amin(arr[:,1]))
output = arr[MIN[0],:]
>> output = A | 1
但当阵列比这更复杂时,我无法将其自动化。谢谢你的帮助 您要查找的是函数
np.min
中的可选关键字axis
。它允许您按列计算数组的最小值。
使用np.min
也比使用np.amin
好,因为它允许您在结果之前少执行一步(您立即得到最小值,而不是表中的索引)
试试这个:
将numpy导入为np
a=np.数组([[1,2,3],[4,5,6]]
np.最小值(a,轴=1)
#结果:数组([1,4])
您要查找的是函数np.min
中的可选关键字axis
。它允许您按列计算数组的最小值。
使用np.min
也比使用np.amin
好,因为它允许您在结果之前少执行一步(您立即得到最小值,而不是表中的索引)
试试这个:
将numpy导入为np
a=np.数组([[1,2,3],[4,5,6]]
np.最小值(a,轴=1)
#结果:数组([1,4])
您可以使用np.unique
从第一列中提取唯一值,然后沿第一个轴使用布尔掩码:
np.stack([(x, a[a[:, 0] == x, 1].min()) for x in np.unique(a[:, 0])])
或者,如果您有权访问pandas
,则可以创建一个数据帧,并在第一列上使用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
可以使用
np.unique
从第一列中提取唯一值,然后沿第一个轴使用布尔掩码:
np.stack([(x, a[a[:, 0] == x, 1].min()) for x in np.unique(a[:, 0])])
或者,如果您有权访问pandas
,则可以创建一个数据帧,并在第一列上使用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
当我在我的两列数组上执行此操作时,它会打印第二个参数的每个值。当我更改为“axis=0”时,它会打印第二列的最小值,与参数A和B无关。参数A和B是数组的形状。当我在我的两列数组上执行此操作时,它会打印第二个参数的每个值。当我更改为“axis=0”时,它会打印第二列的最低值,与参数A和B无关,参数A和B是数组exactlyOk thx的形状!是否有快速方法访问初始数组a中的解决方案索引?我需要这些来构建作为问题解决方案呈现的数组。@aGingerGuy您可以在数组中添加额外的索引列,或者类似地在列表理解中屏蔽索引(并使用argmin)。但是在你的问题中,你用
A,1
表示一个数组,即不取索引,而是取第一列。好的,谢谢!是否有快速方法访问初始数组a中的解决方案索引?我需要这些来构建作为问题解决方案呈现的数组。@aGingerGuy您可以在数组中添加额外的索引列,或者类似地在列表理解中屏蔽索引(并使用argmin)。但在你的问题中,你用A,1
表示一个数组,即不取索引,而是取第一列。