【问题标题】:Vectorize for routine using numpy.roll使用 numpy.roll 对例程进行矢量化
【发布时间】:2019-01-16 18:14:00
【问题描述】:

如何向量化以下代码?

tlngth=20
sp_array = np.zeros((tlngth,tlngth))
sp = np.arange(0,tlngth)

for i in range(tlngth):
    sp_array[i] = np.roll(sp,i)

【问题讨论】:

    标签: python numpy vectorization


    【解决方案1】:

    您实际上是在尝试构建一个 Toeplitz 矩阵。有一个功能:

    import scipy.linalg
    tlngth = 5
    sp_array = scipy.linalg.toeplitz(np.roll(np.arange(tlngth - 1, -1, -1), 1),
                                     np.arange(tlngth))
    #array([[0, 1, 2, 3, 4],
    #       [4, 0, 1, 2, 3],
    #       [3, 4, 0, 1, 2],
    #       [2, 3, 4, 0, 1],
    #       [1, 2, 3, 4, 0]])
    

    【讨论】:

    • ...看起来循环功能可以完成这项工作..但是您已经得到了很多帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多