我希望从数组 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
