我有以下问题:
我有一个矩阵。现在,我想在矩阵的每一行中删除一个条目:在包含某个数字(例如4)的行中,我想删除具有该数字的条目,而在其他行中,我只想删除最后一个元素。 / p>
例如如果我有矩阵
matrix=np.zeros((2,2))
matrix[0,0]=2
matrix[1,0]=4
matrix
给出
2 0
4 0
删除后应该只是
2
0
感谢您的帮助!
答案 0 :(得分:1)
因此,假设连续最多只有一个4
,那么您要做的是:
roll
,则它成为最后一个元素在具有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]]