Python构建numpy矩阵

Python构建numpy矩阵,python,numpy,matrix,Python,Numpy,Matrix,我得到了这个矩阵,我正试图写一个函数来构建任意大小的n的矩阵。我被告知矩阵的高度是n,但不确定宽度 下面是我的代码和输出,是否正确?我对矩阵本身的符号有点困惑 def buildMatrix(n, a): matrix = np.zeros([n, n], dtype=float) x_diag, y_diag = np.diag_indices_from(matrix) for (x,y) in zip(x_diag, y_diag): if x >

我得到了这个矩阵,我正试图写一个函数来构建任意大小的n的矩阵。我被告知矩阵的高度是n,但不确定宽度

下面是我的代码和输出,是否正确?我对矩阵本身的符号有点困惑

def buildMatrix(n, a):
    matrix = np.zeros([n, n], dtype=float)
    x_diag, y_diag = np.diag_indices_from(matrix)
    for (x,y) in zip(x_diag, y_diag):
        if x > (n / 2):
            matrix[x][y] = -2*a
        elif x == (n / 2):
            matrix[x][y] = -(1 + a)
        else:
            matrix[x][y] = -2

        if x != n - 1:
            matrix[x + 1][y] = a if x >= (n / 2) else 1
            matrix[x][y + 1] = a if x >= (n / 2) else 1

    return matrix
使用buildMatrix5、2输出


有人能帮我吗?

要回答你的第一个问题,矩阵的宽度必须为n,才能使矩阵向量积兼容

矩阵的图片在从-2到-1-a到-2a的切换发生的位置不明确。在代码中,检查x==n/2以设置开关。这在python2中很好,但在python3中会导致问题,因为x/2返回2.5。使用更安全的x==n//2,因为n//2在python2和python3中返回一个整数

为了一般性,我将假设切换发生在m行。使用切片和np.diag命令可以更容易地构建矩阵

def buildmat(n, m, a):
    diag = np.zeros(n)
    offdiag = np.zeros(n-1)

    offdiag[0:m] = 1
    offdiag[m:n-1] = a

    diag[0:m] = -2
    diag[m] = -(1+a)
    diag[m+1:n] = -2*a

    matrix =  np.diag(diag) + np.diag(offdiag, 1) + np.diag(offdiag, -1)
    return matrix
运行

buildmat(5, 2, 3)
产生

buildmat(5, 2, 3)
[[-2.  1.  0.  0.  0.]
 [ 1. -2.  1.  0.  0.]
 [ 0.  1. -3.  2.  0.]
 [ 0.  0.  2. -4.  2.]
 [ 0.  0.  0.  2. -4.]]