2014-05-01 17 views
5

Sto convertendo un codice scritto su Matlab in C#. In Matlab esiste una funzione chiamata mvnrnd che è un generatore di numeri casuali normale amultivariato. Ciò richiede due input: n x d media matrice e matrice d-by-d cov. Ho cercato su Google e ho trovato che matrixnormal math.net fa la stessa cosa.numeri casuali normali multivariati da Matlab a C#

A differenza della funzione in Matlab, Matrixnormal richiede tre input: matrice media (M), una matrice di cov per le righe (V) e una matrice di cov per le colonne (K). La documentazione indica se la dimensione di M è d-by-m, quindi V è d-by-d e K è m-by-m. Ho queste due matrici di input (matrice media 1x12 e matrice cov 12x12 per Matlab. Vorrei convertire questi due ingressi in tre ingressi per matrice.

La parte della matrice media non è un problema ma non so come convertire COV parte. io non sono bravo a statistiche. Potrebbe qualcuno mi aiuta a fare questo? Grazie,

+0

Questa sembra essere una domanda matematica piuttosto che un problema di programmazione. Esiste un modo semplice per trasformare una distribuzione normale multivariata in una distribuzione normale della matrice, ma è valida solo per le matrici diagonali MU. Vorrei fare questa domanda a http://stats.stackexchange.com/ – Daniel

risposta

0

questa non è una soluzione elegante o altro, ma penso che possa funzionare ...

Perché don' Si crea una matrice di covarianza riempiendo i valori, quindi chiama ColumnCovariance() e RowCovariance() su di esso? Non ho mai scritto C#, quindi non conosco la sintassi, ma questo dovrebbe darti un'idea generale:

Matrix covariance = new Matrix([some numbers]) // basically just copy the covariance values 
Matrix rowCov = covariance.getRowCovariance() 
Matrix colCov = covariance.getColumnCovariance() 
+0

Ciao Grazie per la tua risposta. Penso anche che funzionerà. Ho appena capito che Accord.net ha una classe per questa materia. Funziona bene e mi ha fatto risparmiare tempo. Ancora una volta, grazie per la tua risposta !! – user3170073