Arrays 从NumPy 2D数组的内部维度中删除最小值
您好,我是python和矢量化新手 假设您有一个5x3 numpy阵列,如下所示:Arrays 从NumPy 2D数组的内部维度中删除最小值,arrays,python-3.x,numpy,vectorization,Arrays,Python 3.x,Numpy,Vectorization,您好,我是python和矢量化新手 假设您有一个5x3 numpy阵列,如下所示: array([[ -1.262, -4.034, 2.422], [ 13.849, 14.377, 4.951], [ 3.203, 10.209, -2.865], [ 3.618, -3.51 , -7.059], [ -0.098, -5.012, 6.389]]) array([[ -1.262, 2.422],
array([[ -1.262, -4.034, 2.422],
[ 13.849, 14.377, 4.951],
[ 3.203, 10.209, -2.865],
[ 3.618, -3.51 , -7.059],
[ -0.098, -5.012, 6.389]])
array([[ -1.262, 2.422],
[ 13.849, 14.377],
[ 3.203, 10.209],
[ 3.618, -3.51 ],
[ -0.098, 6.389]])
你想得到一个新的5x2矩阵,从每个内部维度移除最小值,如下所示:
array([[ -1.262, -4.034, 2.422],
[ 13.849, 14.377, 4.951],
[ 3.203, 10.209, -2.865],
[ 3.618, -3.51 , -7.059],
[ -0.098, -5.012, 6.389]])
array([[ -1.262, 2.422],
[ 13.849, 14.377],
[ 3.203, 10.209],
[ 3.618, -3.51 ],
[ -0.098, 6.389]])
实现这一目标的最佳方式是什么?我想是矢量化吧
谢谢大家! 我认为这有一个相对简单的函数,但它可能不存在于numpy中;熊猫可能更容易做到这一点 对于numpy,这是一种方法:
In [56]: a = np.array([[ -1.262, -4.034, 2.422],
[ 13.849, 14.377, 4.951],
[ 3.203, 10.209, -2.865],
[ 3.618, -3.51 , -7.059],
[ -0.098, -5.012, 6.389]])
In [57]: m = np.argmin(a, axis=1)
In [58]: indices = np.ones(shape=a.shape, dtype=bool)
In [59]: indices[np.arange(5), m] = False
In [60]: a[indices].reshape((-1, a.shape[1]-1))
Out[60]:
array([[ -1.262, 2.422],
[ 13.849, 14.377],
[ 3.203, 10.209],
[ 3.618, -3.51 ],
[ -0.098, 6.389]])
布尔索引的步骤是“反转”从
np.argmin
返回的索引,因为后者返回的是整数索引,而不是布尔索引。我总是对行和列感到困惑:正如你在问题中提到的,你从行而不是列中删除了最小值。但可能有一种方法可以证明它是按列的。相反,从第二(内部)维度移除最小值可能更好。你的可能重复是正确的。我编辑了我的问题。我也很困惑,因为你的标题编辑与问题文本(行与列)不一致,我将两者都删除并替换为“内部维度”。在我输入此答案后,我刚刚注意到此问题的重复:此处的两个答案与我的答案相似。谢谢!这很有帮助:-)