在不使用numpy或zip的情况下查找矩阵的子矩阵

时间:2019-12-12 17:52:14

标签: python

我试图找到一种方法来找到数组X的子矩阵,用户可以在其中提供输入i和j,如下所示:

def submatrix(X, i, j):

预期输出应为不包含第i行和第j列的矩阵X。

示例:

X = [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]]

submatrix(X,1,1)

    [[1, 3],
     [7, 9]]

我试图独自解决它,但显然没有设法做到,也不知道从哪里开始。因此寻求帮助。

5 个答案:

答案 0 :(得分:1)

使用for loop

X = [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]]

def submatrix(X, i, j):
    X=X[:]
    del(X[i]) # delete the row
    for n in range(len(X)):
        del(X[n][j])  # delete the column elements of the rows
    return X

X_new = submatrix(X, 1, 1)
[[1, 3], [7, 9]]

答案 1 :(得分:0)

这怎么样?

def submatrix(X, i, j):
    return [[elem for x, elem in enumerate(row) if x != i]
            for y, row in enumerate(X) if y != j]

X = [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]]

print(submatrix(X, 1, 1))

答案 2 :(得分:0)

def submatrix(x, i, j):
    matrix = []
    for row in x[:i] + x[i+1:]:
        matrix.append(row[:j] + row[j+1:])
    return matrix

示例

>>> submatrix([[1, 2, 3],
               [4, 5, 6],
               [7, 8, 9]], 1, 1)
[[1, 3],
 [7, 9]]

>>> submatrix([[1, 2, 3, 4],
               [5, 6, 7, 8],
               [2, 4, 5, 9],
               [9, 6, 4, 3]], 2, 1)
[[1, 3, 4],
 [5, 7, 8],
 [9, 4, 3]]

答案 3 :(得分:0)

这是解决方案。 首先,您应该删除该行,然后遍历所有行以删除嵌套列表的列索引。像这样

def submatrix(X, i, j):
    del X[i]
    for k in range(len(X)):
        del X[k][j]

答案 4 :(得分:0)

这也可以工作:

def submatrix(X, i, j):
    X = X[:i] + X[i+1:] if i!= len(X) else X[:-1]
    X = [i[:j] + i[j+1:] if j!= len(X[0]) else i[:-1] for i in X]
    return X
相关问题