numpy 吃力地设置稀疏矩阵问题,完成数据分析

41ik7eoe  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(83)

我被分配使用scipy稀疏矩阵求解器scipy.sparse.linalg.spsolve来解决一个稀疏矩阵向量问题。
问题是我不知道如何正确设置问题。一旦矩阵可以设置,数据分析和代码的GPU加速应该很容易。我被困在第一个障碍,因为符号。
Matrix notation problem
以下是我到目前为止所做的尝试:

def matrix_A(N):

    nelements = 1 / N

    row_ind = []
    col_ind = []
    data = []

    f = np.zeros(N, dtype=np.float64)

    count = 0
    for i in range(N):
        for j in range(N):
            if i==j:
                row_ind[count] = col_ind[count] = 1
            if i==0 or i==N:
                if i==N:
                    row_ind[count] = col_ind[count] = 1
                if i==j:
                    row_ind[count] = col_ind[count] = 2-(h**2 * k**2)
                if j==i+1 or j==i-1:
                    row_ind[count] = col_ind[count] = -1    
                else:
                    row_ind[count] = col_ind[count] = 0

    return coo_matrix((data, (row_ind, col_ind)), shape=(N**2, N**2)).tocsr(), f

字符串

yftpprvb

yftpprvb1#

好的,第一部分说A[i,j] = 1,其中i = j,这意味着你的对角元素(从我们目前所知道的来看)都是1,换句话说,你可以从创建单位矩阵开始。

import numpy as np

N = ...
h = ...
k = ...
A = np.eye(N, N)

字符串
下一部分与i = 0, N-1有关(图像显示N,但Python是0索引的,它们可能意味着最后一个值,即索引N-1)。因此,如果i = j,则显示A[i,j] = 2 - h^2*k^2。由于我们引用的是特定的i值,因此可以将其解释为当i = j = 0, N-1时。

A[0, 0] = 2 - (h*k)**2
A[-1, -1] = 2 - (h*k)**2


它还说,如果j = i + 1j = i - 1,则A[i,j] = -1。同样,因为我们处理的是i = 0, N-1,所以我们只考虑A[0,1]A[N-1,N-2]。当i = 0i = N - 1时,我们忽略j = i - 1j = i + 1,因为它们会给予超出范围的j值。

A[0, 1] = A[-1, -2] = -1


然后,您可以将矩阵转换为稀疏矩阵。

相关问题