从矩阵中删除某些元素

时间:2019-06-27 12:31:07

标签: python arrays matrix

我有以下问题:

我有一个矩阵。现在,我想在矩阵的每一行中删除一个条目:在包含某个数字(例如4)的行中,我想删除具有该数字的条目,而在其他行中,我只想删除最后一个元素。 / p>

例如如果我有矩阵

    matrix=np.zeros((2,2))
    matrix[0,0]=2
    matrix[1,0]=4
    matrix

给出

  

2 0

     

4 0

删除后应该只是

  

2

     

0

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

因此,假设连续最多只有一个4,那么您要做的是:

  1. 重复所有行,如果有四行使用roll,则它成为最后一个元素
  2. 删除最后一列

在具有4的行中,它将删除此4并移动其后的其余值, 在没有4的行中,它将删除最后一个元素。

(我可以随意尝试使用更大的矩阵,以确保输出符合预期)

尝试一下:

import numpy as np


# Actual solution
def remove_in_rows(mat, num):
    for i, row in enumerate(mat):
        if num in row.tolist():
            index = row.tolist().index(num)
            mat[i][index:] = np.roll(row[index:], -1)
    return np.delete(mat, -1, 1)


# Just some example to demonstrate it works
matrix = np.array([[10 * y + x for x in range(6)] for y in range(6)])
matrix[1, 2] = 4
matrix[3, 3] = 4
matrix[4, 0] = 4

print("BEFORE:")
print(matrix)

matrix = remove_in_rows(matrix, 4)

print("AFTER:")
print(matrix)

输出:

BEFORE:
[[ 0  1  2  3  4  5]
 [10 11  4 13 14 15]
 [20 21 22 23 24 25]
 [30 31 32  4 34 35]
 [ 4 41 42 43 44 45]
 [50 51 52 53 54 55]]
AFTER:
[[ 0  1  2  3  5]
 [10 11 13 14 15]
 [20 21 22 23 24]
 [30 31 32 34 35]
 [41 42 43 44 45]
 [50 51 52 53 54]]