python list有一个remove方法。在
使用实用函数,我们可以从一行中移除最小和最大元素:def foo(i,j,k):
il = i.tolist()
il.remove(j)
il.remove(k)
return il
In [230]: [foo(i,j,k) for i,j,k in zip(a,b,c)]
Out[230]: [[4, 5], [2, 5], [3, 9]]
这可以用np.array(...)转换回一个数组。注意,这只删除了最后一行中的9中的一个。如果它同时删除了这两个值,最后一个列表将只有1个值,并且结果无法转换回二维数组。在
我确信我们可以想出一个纯数组方法,可能使用argmax和{},而不是{}和{}。但我认为对于Python初学者来说,列表方法是一个更好的起点。在
一种阵列掩蔽方法
^{pr2}$
同样,如果我们只从每一行中删除一个max和一个min,这会更好。在
另一种掩蔽方法:In [257]: (a!=b[:,None]) & (a!=c[:,None])
Out[257]:
array([[False, True, True, False],
[ True, False, True, False],
[ True, False, False, False]], dtype=bool)
In [258]: a[(a!=b[:,None]) & (a!=c[:,None])]
Out[258]: array([4, 5, 2, 5, 3])
这确实删除了最后一行中的所有“9”。但它不保留行分割。在
这将保留行结构,并允许可变长度:In [259]: mask=(a!=b[:,None]) & (a!=c[:,None])
In [260]: [i[j] for i,j in zip(a, mask)]
Out[260]: [array([4, 5]), array([2, 5]), array([3])]