掩盖矩阵行中的最小值

时间:2016-04-19 20:38:41

标签: python numpy matrix masking minimum

我有这个3x3矩阵:

a=array([[ 1, 11,  5],
   [ 3,  9,  9],
   [ 5,  7, -3]])

我需要屏蔽每一行中的最小值,以便计算丢弃最小值的每一行的平均值。有一般解决方案吗? 我试过

a_masked=np.ma.masked_where(a==np.ma.min(a,axis=1),a)

哪个屏蔽了第一行和第三行的最小值,但不是第二行?

我将不胜感激任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

问题是因为比较a == a.min(axis=1)正在将每个与每行的最小值进行比较,而不是将每一行与最小值进行比较。这是因为a.min(axis=1)返回一个向量而不是一个行为类似于Nx1数组的矩阵。因此,在广播时,==运算符以列方式执行操作以匹配维度。

a == a.min(axis=1)

# array([[ True, False, False],
#        [False, False, False],
#        [False, False,  True]], dtype=bool)

解决此问题的一种可能方法是resizea.min(axis=1)的结果导入列向量(例如3 x 1 2D数组)。

a == np.resize(a.min(axis=1), [a.shape[0],1])

# array([[ True, False, False],
#        [ True, False, False],
#        [False, False,  True]], dtype=bool)

或者更简单地说@ColonelBeuvel已经显示:

a == a.min(axis=1)[:,None]

现在将其应用于整行代码。

a_masked = np.ma.masked_where(a == np.resize(a.min(axis=1),[a.shape[0],1]), a)

# masked_array(data =
#   [[-- 11 5]
#   [-- 9 9]
#   [5 7 --]],
#        mask =
#           [[ True False False]
#            [ True False False]
#            [False False  True]],
#           fill_value = 999999)

答案 1 :(得分:0)

min()函数是什么?

对于每一行,只需执行min(行),它会在您的Case中为您提供此列表中的最小值。只需将此最小值附加到所有最小值的列表中。

minList = []

for i in array: minList.append(min(i))