Python 屏蔽矩阵行中的最小值

Python 屏蔽矩阵行中的最小值,python,numpy,matrix,masking,minimum,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) 哪一个屏蔽了第一行和第三行中的最小值,而不是第二行中的最小值 我将感谢任何帮助。谢谢 min()函数的作用是什么 对于每一行,只需执行min(Row),它将为

我有这个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)
哪一个屏蔽了第一行和第三行中的最小值,而不是第二行中的最小值

我将感谢任何帮助。谢谢

min()函数的作用是什么

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

minList=[]

阵列中i的

minList.append(min(i))
这个问题是因为比较
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)
解决此问题的一种可能方法是将
a.min(轴=1)
的结果调整为列向量(例如,3 x 1 2D数组)

或者更简单地说,正如@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)

不,不,和不。对于这样的操作,For循环是“禁止的”。你能在上面的另一个答案的评论部分帮助我吗@谢谢你的解释!它现在起作用了,多亏了@Colonel Beauvel,实际上我还有一个问题。如果我有一行有两个或三个相同的元素,例如:a=array([[7,5,5],[3,6,9],[5,1,1]]),我怎么能只屏蔽一个最小值而不屏蔽所有值呢?你也能帮我吗@上校
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)