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

Define 2D matrix with non-zero elements only in a rectangular subregion

给定两个指定维度 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)

returns

[[ 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

哪个做的工作。 但是,我在想是否还有更多 efficient/easier 方法来实现这样的目标,也许使用一些晦涩的(对我而言)numpy 功能或其他东西。

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数组切片