Skip to main content
 首页 » 编程设计

python之从均值计算中删除数组的最大和最小元素

2025年05月04日22findumars

我希望从数组 3*4 中删除最大数和最小数。比方说,数据如下所示:

a=np.array([[1,4,5,10],[2,6,5,0],[3,9,9,0]]) 

所以我希望看到这样的结果: deleted_data=[4,5],[2,5],[3]

你能告诉我如何从每个数组中删除最大值和最小值吗?


为此,我喜欢这样(更新):

#to find out the max / min values: 
b = np.max(a,1) #max 
c = np.min(a,1) #min 
 
#creating dataset after deleting max & min 
d=(a!=b[:,None]) & (a!=c[:,None])  
f=[i[j] for i,j in zip(a, d)] 
 
output: [array([8, 7, 7, 9, 9, 8]), array([8, 7, 8, 6, 8, 8]), array([9, 8, 9, 9, 8]), array([6, 7, 7, 6, 6, 7]), array([7, 7, 7, 7, 6])] 

现在我不确定如何计算列表对象的平均值? 我想计算每个数组的平均值,所以我试过这个:

mean1=f.mean(axis=0) 

但是没有用。

请您参考如下方法:

另一种方法是使用 Masked Array

import numpy.ma as ma 
 
mask = np.logical_or(a == a.max(1, keepdims = 1), a == a.min(1, keepdims = 1)) 
a_masked = ma.masked_array(a, mask = mask) 

如果你想要未屏蔽元素的平均值,你可以从那里开始

a_masked.mean() 

或者你甚至可以计算行的平均值

a_masked.mean(1).data 

或列(奇怪,但似乎是你要的)

a_masked.mean(0).data