【问题标题】:Remove/delete each minimum value in each row of a NxM matrix?删除/删除 NxM 矩阵每一行中的每个最小值?
【发布时间】:2018-11-26 19:18:46
【问题描述】:

是否可以删除/删除 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,:]))

【问题讨论】:

  • 这是一个 NumPy 矩阵吗?你有没有尝试过?
  • 是的,它是一个 numpy 矩阵。我试过 np.delete、matrix_name.remove 和 matrix_name[n>np.matrix_name]
  • 您是要每行只删除一个值,还是要删除等于该行中最小值的所有值?后一种情况,输出应该是什么格式?
  • @CEFOG 我们需要知道上述问题的答案才能删除正确数量的值。您是想从成绩簿中删除所有 0,还是只删除与最低分并列的一个?
  • 每一行只有一个最小值(对不起,我应该提到这一点)。所以我只需要删除一个值

标签: python numpy matrix minimum numpy-ndarray


【解决方案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]])

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

【讨论】:

    【解决方案2】:

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

    m, n = a.shape
    np.where(np.arange(n-1) < a.argmin(axis=1)[:, None], a[:, :-1], a[:, 1:])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-19
      • 2020-06-27
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      相关资源
      最近更新 更多