【问题标题】:Deleting certain elements from a matrix从矩阵中删除某些元素
【发布时间】:2019-11-09 11:28:00
【问题描述】:

我有以下问题:

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

例如如果我有矩阵

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

这给了

2 0

4 0

删除后应该只是

2

0

感谢您的帮助!

【问题讨论】:

  • 在包含4 的行上,我们是否保证只有一个4
  • 对不起,是的,最多只有 4 个!
  • 酷,然后看看我下面的回答是否有助于解决你的问题:)

标签: python arrays matrix


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

【讨论】:

  • 如果您现在将实际代码打包到一个函数中,例如remove_in_rows(num),您可以发布它。
  • 如果你给出一个完整的工作示例,它还构造了示例参数,那么将它们全部放在一个大代码块中就太令人困惑了
  • 同意,定义函数确实有助于了解什么是“解决方案代码”以及示例中的内容。
  • 另外,您可以像这样创建矩阵:matrix = np.array([[10*y+x for x in range(6)] for y in range(6)])。这也可以解决您的值是浮点数的问题。
  • 哦,太好了!我尝试使用np.ndarray 执行此操作并出现错误,这就是我选择循环的原因,哎呀:stackoverflow.com/questions/15879315/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 2012-02-13
  • 2021-11-01
  • 1970-01-01
  • 2021-04-16
  • 2019-03-23
相关资源
最近更新 更多