All'inizio ho provato a fare la variante frontale, cioè a contare tutte le righe ogni volta. Ho avuto l'impressione che ci sia un errore in Alglib, perché non sono riuscito a trovarlo nel mio.
Il risultato spesso coincide.
Ma in alcune situazioni non è così.
Se fosse sempre così, sarebbe colpa mia. Ma qui c'è qualcosa di strano.
E PearsonCorrM2 può essere accelerato di 2 volte se si conta per triangolo, cioè partendo dalla fine. Contare 100 righe con tutti, poi 99 con tutti 0-99, 99 e 100 già contati - si può semplicemente copiare. ...50 righe con tutti fino al 50, ecc. E non contare con se stesso perché =1.
P.S. In generale, il tuo codice è bello e conciso. Io farei tutto in loops))))
Forester #: E PearsonCorrM2 può essere accelerato di 2 volte se si conta per triangolo, cioè partendo dalla fine. Conta 100 righe con tutti, poi 99 con tutti 0-99, 99 e 100 già contati - puoi semplicemente copiarli. ...50 righe con tutti fino al 50° e così via.
Ho letto da qualche parte che è possibile calcolare rapidamente la correlazione attraverso la trasformata di Fourier veloce... Anche come opzione per accelerare.
mytarmailS #: Ho letto da qualche parte che è possibile leggere rapidamente la correlazione attraverso una trasformata di Fourier veloce... Anche come opzione per accelerare.
L'ho fatto. Ha senso quando la lunghezza della stringa è grande. Prima o poi ve lo mostrerò.
Qual è l'obiettivo finale di tutta questa storia della correlazione?
Sarò in grado di calcolare ciò che gli altri non possono fare a causa di limitazioni tecniche.
Anche test e visualizzazione e azioni rapide, probabilmente.
Anche l'ottimizzazione finale è normale, per raccogliere i parametri delle offerte.
All'inizio ho provato a fare la variante frontale, cioè a contare tutte le righe ogni volta. Ho avuto l'impressione che ci sia un errore in Alglib, perché non sono riuscito a trovarlo nel mio.
Il risultato spesso coincide.
Ma in alcune situazioni non è così.
Se fosse sempre così, sarebbe colpa mia. Ma qui c'è qualcosa di strano.
Print(Matrix1);
Print("------------------");
Print(Matrix2);
La Matricex2 ha le prime 5 corrispondenze, poi gli zeri.
Le matrici sono diventate simili, ma IsEqual non passa. C'è qualcos'altro da qualche parte...Ho cambiato Res.Col(Corr.Row(0), i); in Res.Row(Corr.Row(0), i);
Modificato Res.Col(Corr.Row(0), i); in Res.Row(Corr.Row(0), i);
Sembra che sia sbagliato.
Realizzato
Print(Matrix1);
Print("------------------");
Print(Matrix2);
La Matricex2 ha le prime 5 corrispondenze, poi gli zeri.
Le matrici sono diventate simili, ma IsEqual non passa. C'è qualcos'altro da qualche parte...Ho cambiato Res.Col(Corr.Row(0), i); in Res.Row(Corr.Row(0), i);
Trovato il problema
Dovrebbe essere così
for (int i = 0; i < (int)Matrix.Cols(); i++)
{
if (i)
Vector.SwapCols(0, i);
CBaseStat::PearsonCorrM2(Vector, MatrixIn, MatrixIn.Rows(), 1, MatrixIn.Cols(), Corr);
Res.Col(Corr.Row(0), i);
}
P.S.
In generale, il tuo codice è bello e conciso. Io farei tutto in loops))))
E PearsonCorrM2 può essere accelerato di 2 volte se si conta per triangolo, cioè partendo dalla fine. Conta 100 righe con tutti, poi 99 con tutti 0-99, 99 e 100 già contati - puoi semplicemente copiarli. ...50 righe con tutti fino al 50° e così via.
Ho letto da qualche parte che è possibile leggere rapidamente la correlazione attraverso una trasformata di Fourier veloce... Anche come opzione per accelerare.
L'ho fatto. Ha senso quando la lunghezza della stringa è grande. Prima o poi ve lo mostrerò.
Trovato il problema
Dovrebbe essere così