一维阵列的所有循环移位的2D阵列

Ami*_*ory 5 numpy vectorization scipy

假设a是一些numppy.array带有n个元素的1d :

a = np.array([a_0, a_1, ..., a_n_minus_1])
Run Code Online (Sandbox Code Playgroud)

我想在第i行生成包含第i个循环移位的2d(n X n):numpy.arraya

np.array([[a_0, a_1, ..., a_n_minus_1], [a_n_minus_1, a_0, a_1, ...], ...]])
Run Code Online (Sandbox Code Playgroud)

最好没有环.如何有效地完成这项工作?

(该函数np.roll似乎相关,但显然只需要一个标量shift.)

gg3*_*349 9

你实际上正在建立一个循环矩阵.只需使用scipy circulant功能.要小心,因为你必须传入第一个垂直列,而不是第一行:

from scipy.linalg import circulant
circulant([1,4,3,2]
> array([[1, 2, 3, 4],
         [4, 1, 2, 3],
         [3, 4, 1, 2],
         [2, 3, 4, 1]]
Run Code Online (Sandbox Code Playgroud)

作为参考,循环矩阵具有非常好的性质.