仅在矩形子区域中定义具有非零元素的2D矩阵

时间:2016-08-25 10:01:00

标签: python numpy matrix sparse-matrix

给定两个指定的维度N1N2以及一些边界ymin, ymax, xmin, xmax,我想构建一个N1xN2矩阵(无论是numpy数组还是普通的python列表) )除了在其边界指定的矩形子区域外,它在任何地方都是零。

更确切地说,我正在寻找如何实现函数rectangular_sparse_matrix(N1, N2, ymin, ymax, xmin, xmax),例如,

N1 = N2 = 5
rectangular_sparse_matrix(N1, N2, 0, 2, 1, 2)

返回

[[ 0  1  1  0  0]
 [ 0  1  1  0  0]
 [ 0  1  1  0  0]
 [ 0  0  0  0  0]
 [ 0  0  0  0  0]]

天真的方式是循环遍历元素,比如

def rectangular_sparse_matrix(N1, N2, ymin, ymax, xmin, xmax):
    matrix = np.zeros([N1, N2])
    for row in range(N1):
        for col in range(N2):
            if ymin <= row <= ymax and xmin <= col <= xmax:
                matrix[row, col] = 1
    return matrix

完成这项工作。 然而,如果有一些更有效/更容易的方法来实现这样的事情,我可能会徘徊,可能使用一些模糊的(对我来说)numpy功能或其他东西。

1 个答案:

答案 0 :(得分:2)

def rectangular_sparse_matrix(N1, N2, ymin, ymax, xmin, xmax):
    m = np.zeros([N1, N2])
    m[ymin:ymax+1, xmin:xmax+1] = 1
    return m

在函数切片中使用numpy数组。