Numpy 将矩阵转换为LAPACK的最快实现

Numpy 将矩阵转换为LAPACK的最快实现,numpy,matrix,scipy,lapack,diagonal,Numpy,Matrix,Scipy,Lapack,Diagonal,我有一个函数,可以将矩阵转换为SciPy中的例程所需的内容。我已经编写了简短的代码来说明我的工作: 将numpy导入为np 导入时间 N=3 def转换矩阵lapack(Amat,out): 对于范围(N)内的ii: out[(2*N-2-ii):(3*N-2-ii),ii]=Amat[:,ii] A=np.arange(N**2)。重塑(N,N) A_lapack=np.zero((3*N-2,N),dtype=np.float) tt=时间。时间() 转换矩阵(A,A) 打印(time.ti

我有一个函数,可以将矩阵转换为SciPy中的例程所需的内容。我已经编写了简短的代码来说明我的工作:

将numpy导入为np
导入时间
N=3
def转换矩阵lapack(Amat,out):
对于范围(N)内的ii:
out[(2*N-2-ii):(3*N-2-ii),ii]=Amat[:,ii]
A=np.arange(N**2)。重塑(N,N)
A_lapack=np.zero((3*N-2,N),dtype=np.float)
tt=时间。时间()
转换矩阵(A,A)
打印(time.time()-tt)
实际上,通用矩阵(N=3)

>>A
数组([[0,1,2],
[3, 4, 5],
[6, 7, 8]])
变成

>>A\u lapack
数组([[0,0,0.],
[0., 0., 0.],
[0., 0., 2.],
[0., 1., 5.],
[0., 4., 8.],
[3., 7., 0.],
[6., 0., 0.]])
如何使用NumPy中的内置函数来固定任何N的代码(我的目标是N小于50)?

这应该可以:

来自scipy.sparse导入诊断
将numpy作为np导入
N=3
A=np.arange(N**2)。重塑(N,N)
偏移量=np.arange(-N+1,1)
A_lapack=np.flipud(图(A,偏移量,形状=(3*N-2,N)).toarray())
工作原理:

  • 它使用
  • 使用鼠标将其翻转过来
  • 如果我们使用
    np.zero
    包含数组分配步骤,则速度相当,但对于
    N=100
    的数组,速度较慢:

    • 0.00021839141845703125秒(原始代码)
    • 0.0017552375793457031秒(我的解决方案)
    这应该可以:

    来自scipy.sparse导入诊断
    将numpy作为np导入
    N=3
    A=np.arange(N**2)。重塑(N,N)
    偏移量=np.arange(-N+1,1)
    A_lapack=np.flipud(图(A,偏移量,形状=(3*N-2,N)).toarray())
    
    工作原理:

  • 它使用
  • 使用鼠标将其翻转过来
  • 如果我们使用
    np.zero
    包含数组分配步骤,则速度相当,但对于
    N=100
    的数组,速度较慢:

    • 0.00021839141845703125秒(原始代码)
    • 0.0017552375793457031秒(我的解决方案)

    如果您使用
    np.diag
    替代此解决方案,可能会更快。使用
    scipy.sparse.dia.dia_矩阵也可以直接提高性能。如果您使用
    np.diag
    替代此解决方案,可能会更快。使用
    scipy.sparse.dia_矩阵也可以直接提高性能。