【问题标题】:NumPy - Create Upper Triangular Matrix with Diagonals of Increasing PowerNumPy - 创建具有递增幂的对角线的上三角矩阵
【发布时间】:2020-07-09 17:22:19
【问题描述】:

我想为一些浮点数c 和一些维度N 创建一个上三角矩阵:

[[1 , c , c^2, ... c^N],
 [0,  1 ,   c, ... c^{N-1}],
 [0,  0 ,   1, ... c^{N-2}],
 .
 .
 .
 [0,  0 ,   0, ....    1]]

具体来说,如果N=2,那么矩阵应该是

[[1, c],
 [0, 1]]

如果N=3,那么矩阵应该是:


[[1, c, c^2],
 [0, 1,   c],
 [0, 0,   1]]

我该怎么做?

【问题讨论】:

    标签: python-3.x numpy triangular


    【解决方案1】:

    这是一个简单的方法:

    import numpy as np
    
    c = 2
    n = 5
    
    r = np.arange(n + 1)
    p = r - r[:, np.newaxis]
    res = np.triu(c ** p.clip(min=0))
    print(res)
    # [[ 1  2  4  8 16 32]
    #  [ 0  1  2  4  8 16]
    #  [ 0  0  1  2  4  8]
    #  [ 0  0  0  1  2  4]
    #  [ 0  0  0  0  1  2]
    #  [ 0  0  0  0  0  1]]
    

    如果你想制作一个非常大的矩阵并想节省时间和内存,你也可以这样做:

    import numpy as np
    
    c = 2
    n = 5
    
    b = np.zeros(2 * n + 1, a.dtype)
    b[n:] = c ** np.arange(n + 1)
    s, = b.strides
    res = np.lib.stride_tricks.as_strided(b[n:], shape=(n + 1, n + 1), strides=(-s, s),
                                          writeable=False)
    print(res)
    # [[ 1  2  4  8 16 32]
    #  [ 0  1  2  4  8 16]
    #  [ 0  0  1  2  4  8]
    #  [ 0  0  0  1  2  4]
    #  [ 0  0  0  0  1  2]
    #  [ 0  0  0  0  0  1]]
    

    【讨论】:

    • 漂亮!谢谢!
    猜你喜欢
    • 2015-11-13
    • 2018-04-29
    • 2022-11-29
    • 2019-03-15
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多