Supponiamo a
qualche 1d numppy.array
con n elementi:array 2D Di Tutti spostamenti ciclici di una matrice 1D
a = np.array([a_0, a_1, ..., a_n_minus_1])
Vorrei generare il 2d (n X n) numpy.array
contenente, alla riga i, il i esimo spostamento ciclico di a
:
np.array([[a_0, a_1, ..., a_n_minus_1], [a_n_minus_1, a_0, a_1, ...], ...]])
preferibilmente senza anelli. Come può essere fatto in modo efficiente?
(La funzione np.roll
sembra legato, ma a quanto pare vuole solo uno scalare shift
.)
Il trucco per fare questo in modo efficace è quello di utilizzare diagonali. Ad esempio, la diagonale principale sarà tutto il primo elemento, ecc. –
@JoeKington Way cool, grazie! IIUC, intendi utilizzare il fatto che un cambiamento ciclico può essere pensato come una trasformazione lineare, sì? –
@JoeKington In realtà, suona molto bene, ma non riesco a capirlo - la generazione delle matrici che eseguono le diverse trasformazioni lineari sarebbe molto costosa, no? –