Problème
Vous avez des données dans une matrice et avez besoin d'une table de données, ou l'inverse
Data table or matrix?Data table or matrix?Tableau de données ou matrice ?
Solution
Il existe une fonction, AsTable(), qui crée une nouvelle table de données à partir d'une matrice, et une méthode de table de données, GetAsMatrix(), qui crée une matrice à partir des colonnes numériques d'une table.
Il existe également un moyen d'indexer les tables de données directement avec abonnement à une table de données .
// make a matrix of 5 rows, 3 cols, random values
mat = J( 5, 3, Random Normal() );
// make a data table from a matrix
dt = As Table( mat );
// make a matrix from a data table
mat2 = dt << GetAsMatrix;
// comparing two matrices returns a matrix of answers
// and the All function returns true if all of the
// matrix values are true
Show( All( mat == mat2 ) );
// use data table subscripting to get a matrix of all
// rows and all columns from the table; the zero subscript
// is used with matrix and data table to mean "all
// rows or all columns"
mat3 = dt[0, 0];
Show( All( mat == mat3 ) );
Merci!
Abonnement aux tables de données décrit l'indexation d'une table de données sous forme de matrice, et Qu'est-ce que la matrice JSL ? montre comment utiliser l'indice matriciel. Ainsi, avec une table de données (ou une matrice), plutôt que de copier les données hors de la table pour créer une matrice, vous pouvez obtenir une ligne de l'une comme celle-ci :
// if dt is a table...
rowVector = dt[ rowNumber, 0 ]; // all columns
rowVector = dt[ rowNumber, { age, height, weight } ]; // selected columns
// if m is a matrix
rowVector = m[ row, 0 ];
rowVector = m[ row, 5::9 ]; // selected items from row
// and both dimensions at once
patch = m[ 3::5, 7::11 ];L'indice zéro signifie "toute cette dimension". L'indexation de la matrice commence à un.
Merci, très utile, et un moyen pratique d'obtenir un vecteur ligne à partir d'une table de données ?
Merci!