Python 从Numpy.zero(100100)转换为使用Scipy.sparse.lil_矩阵(100100)错误

Python 从Numpy.zero(100100)转换为使用Scipy.sparse.lil_矩阵(100100)错误,python,numpy,scipy,sparse-matrix,Python,Numpy,Scipy,Sparse Matrix,我正在创建一个有限体积解算器,并成功地使用numpy.zero创建了一个零矩阵,并使用for循环使用我希望计算的值填充矩阵的特定位置 但是,我需要使用一个更大的矩阵,特别是numpy.zeros(102400102400),但我得到了错误“数组太大”,我可以使用numpy.zeros(1000010000)矩阵,但这似乎是我的系统(6GB Ram)的限制 我被告知将矩阵更改为稀疏矩阵将为我的代码和所有我要做的计算腾出空间。但是我最初创建用于填充零矩阵的代码不能用于此稀疏矩阵,我不知道为什么。 i

我正在创建一个有限体积解算器,并成功地使用numpy.zero创建了一个零矩阵,并使用for循环使用我希望计算的值填充矩阵的特定位置

但是,我需要使用一个更大的矩阵,特别是numpy.zeros(102400102400),但我得到了错误“数组太大”,我可以使用numpy.zeros(1000010000)矩阵,但这似乎是我的系统(6GB Ram)的限制

我被告知将矩阵更改为稀疏矩阵将为我的代码和所有我要做的计算腾出空间。但是我最初创建用于填充零矩阵的代码不能用于此稀疏矩阵,我不知道为什么。

import numpy as np

import scipy as sp

from scipy import sparse

matA = sp.sparse.lil_matrix(m, m)

matb = sp.sparse.lil_matrix(m, 1)

i = 0

for row in range(Lrow):

    for column in range(Lcol):

        if row == 0 and column == 0:  

            matA[i, i + 1] = -k * (delY / delX)  

            matA[i, i + Lcol] = -k * (delX / delY)  

            matA[i, i] = -(3 * matA[i, i + 1] + matA[i, i + Lcol]) 

编辑:我的m=100000,每次在if语句末尾,我都会被i=i+1迭代,这是因为您错误地初始化了稀疏矩阵。请看一看文档。假设
m
是您的形状参数,您实际上希望按如下方式初始化矩阵(请注意,第一个参数是元组):

matA=scipy.sparse.lil_矩阵((m,m))
马塔
按照这样做的方式,最终得到的是1x1矩阵,我认为这不是您的意图:

matA = scipy.sparse.lil_matrix(m, m)
matA
<1x1 sparse matrix of type '<class 'numpy.int64'>'
    with 1 stored elements in LInked List format>
matA=scipy.sparse.lil_矩阵(m,m)
马塔

原因是
lil_matrix
的第一个参数是寻找一个数组或类似数组的数组,另一个稀疏矩阵或元组。当您输入
lil_matrix(m,m)
时,它基本上忽略了第二个参数,因为第一个参数被解释为类似数组的参数,而只是使用设置为
m

的值初始化1x1数组,您的稀疏矩阵初始化不正确。请看一看文档。假设
m
是您的形状参数,您实际上希望按如下方式初始化矩阵(请注意,第一个参数是元组):

matA=scipy.sparse.lil_矩阵((m,m))
马塔
按照这样做的方式,最终得到的是1x1矩阵,我认为这不是您的意图:

matA = scipy.sparse.lil_matrix(m, m)
matA
<1x1 sparse matrix of type '<class 'numpy.int64'>'
    with 1 stored elements in LInked List format>
matA=scipy.sparse.lil_矩阵(m,m)
马塔

原因是
lil_matrix
的第一个参数是寻找一个数组或类似数组的数组,另一个稀疏矩阵或元组。当您输入
lil_matrix(m,m)
时,它基本上忽略了第二个参数,因为第一个参数被解释为类似数组的参数,只需使用设置为
m

的值初始化1x1数组。如果您以前没有使用过
sparse
矩阵,请使用可以显示和测试的小参数。尝试文档中显示的不同初始化方法。看看不同的格式
lil
对于迭代定义来说是可以的,但是即使你能做到这一点,你也会遇到一个问题,抱怨速度太慢。如果你以前没有使用过稀疏矩阵,可以使用小矩阵来显示和测试。尝试文档中显示的不同初始化方法。看看不同的格式
lil
对于迭代定义来说是可以的,但是即使你让它工作起来,你也会遇到一个抱怨速度慢的问题。