屏蔽矩阵行中的最小值
Mask minimum values in matrix rows
我有这个 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) ,它就会在你的案例中为你提供此列表中的最小值。只需将此最小值附加到所有最小值的列表中即可。
最小列表=[]
for i in array:
minList.append(min(i))
问题是因为比较 a == a.min(axis=1)
是将每个 列 与每行的最小值进行比较,而不是将每行与最小值进行比较。这是因为 a.min(axis=1)
returns 是向量而不是矩阵,它的行为类似于 Nx1
数组。因此,在广播时,==
运算符以列方式执行操作以匹配维度。
a == a.min(axis=1)
# array([[ True, False, False],
# [False, False, False],
# [False, False, True]], dtype=bool)
解决此问题的一种潜在方法是将 a.min(axis=1)
的结果 resize
放入列向量(例如 3 x 1 二维数组)中。
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)
我有这个 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) ,它就会在你的案例中为你提供此列表中的最小值。只需将此最小值附加到所有最小值的列表中即可。
最小列表=[]
for i in array:
minList.append(min(i))
问题是因为比较 a == a.min(axis=1)
是将每个 列 与每行的最小值进行比较,而不是将每行与最小值进行比较。这是因为 a.min(axis=1)
returns 是向量而不是矩阵,它的行为类似于 Nx1
数组。因此,在广播时,==
运算符以列方式执行操作以匹配维度。
a == a.min(axis=1)
# array([[ True, False, False],
# [False, False, False],
# [False, False, True]], dtype=bool)
解决此问题的一种潜在方法是将 a.min(axis=1)
的结果 resize
放入列向量(例如 3 x 1 二维数组)中。
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)