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.)
你实际上正在建立一个循环矩阵.只需使用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)
作为参考,循环矩阵具有非常好的性质.