使用Numpy高效建立“滚动”行矩阵

2024-04-25 23:07:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从一维数组构造一个(n,n)-数组,其中每一行相对于前一行移动一位(使用换行)。以下代码执行此操作:

import numpy as np

r = np.array([1, 2, 3, 4, 5])
n = len(r)
MM = np.zeros((n, n), dtype=r.dtype)
for k in range(n):
    MM[k, :] = np.roll(r, k)

print(MM)

结果是:

[[1 2 3 4 5]
 [5 1 2 3 4]
 [4 5 1 2 3]
 [3 4 5 1 2]
 [2 3 4 5 1]]

有没有一种方法可以更快地完成这个Numpy,即避免Numpy中的大rfor循环?你知道吗


Tags: inimportnumpyforlenasnpzeros
1条回答
网友
1楼 · 发布于 2024-04-25 23:07:04

看看^{}

In [255]: r
Out[255]: array([1, 2, 3, 4, 5])

In [256]: circulant(r).T
Out[256]: 
array([[1, 2, 3, 4, 5],
       [5, 1, 2, 3, 4],
       [4, 5, 1, 2, 3],
       [3, 4, 5, 1, 2],
       [2, 3, 4, 5, 1]])

^{}

In [257]: toeplitz(np.roll(r[::-1], 1), r)
Out[257]: 
array([[1, 2, 3, 4, 5],
       [5, 1, 2, 3, 4],
       [4, 5, 1, 2, 3],
       [3, 4, 5, 1, 2],
       [2, 3, 4, 5, 1]])

相关问题 更多 >