Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 从NumPy 2D数组的内部维度中删除最小值_Arrays_Python 3.x_Numpy_Vectorization - Fatal编程技术网

Arrays 从NumPy 2D数组的内部维度中删除最小值

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],

您好,我是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],
       [ 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
返回的索引,因为后者返回的是整数索引,而不是布尔索引。

我总是对行和列感到困惑:正如你在问题中提到的,你从行而不是列中删除了最小值。但可能有一种方法可以证明它是按列的。相反,从第二(内部)维度移除最小值可能更好。你的可能重复是正确的。我编辑了我的问题。我也很困惑,因为你的标题编辑与问题文本(行与列)不一致,我将两者都删除并替换为“内部维度”。在我输入此答案后,我刚刚注意到此问题的重复:此处的两个答案与我的答案相似。谢谢!这很有帮助:-)