删除/删除NxM矩阵每行中的每个最小值?

问题描述 投票:1回答:2

是否可以删除/删除NxM矩阵每行中的每个最小值,从而创建新矩阵?

到目前为止我没试过这个:

for n in range(0,len(matrix_name)):
    Ma = grades.remove(np.min(matrix_name[n,:]))

这也是:

for n in range(0,len(matrix_name)):
    Ma = np.delete(matrix_name,np.min(matrix_name[n,:]))
python numpy matrix minimum numpy-ndarray
2个回答
1
投票

如果从原始数组重建期望的结果而不是通过删除最小值来修改原始数组,则允许这种方法应该完成工作:

# some test array
In [19]: arr
Out[19]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19]])

In [20]: r, c = arr.shape

# find the minimum along axis 1 (i.e. along rows)
In [21]: min_vals = np.min(arr, axis=1, keepdims=True)

# reshape the result to 2D array
In [22]: (arr[np.where(arr != min_vals)]).reshape(r, c-1)
Out[22]: 
array([[ 1,  2,  3],
       [ 5,  6,  7],
       [ 9, 10, 11],
       [13, 14, 15],
       [17, 18, 19]])

注意:此方法假定每行中只有一个最小值。


0
投票

如果重复项不是问题,或者每行只删除其中一个是可接受的:

m, n = a.shape
np.where(np.arange(n-1) < a.argmin(axis=1)[:, None], a[:, :-1], a[:, 1:])
© www.soinside.com 2019 - 2024. All rights reserved.