Convertir la liste en matriceQuelle est la manière la plus rapide de convertir une liste : {"a", 1, 2, "b"} en une matrice : [. 1 2 .] ?
Je m'attends à pouvoir parcourir tous les éléments en boucle, mais j'espère qu'il existe un moyen plus rapide car je le ferai plusieurs milliers de fois dans mon application, chaque liste contenant des centaines d'éléments.
Re : Convertir une liste en matriceBOOYAH !, Déclarer victoire et rentrer à la maison ! Sur ma table de données avec 30 000 lignes et 150 colonnes, ma routine est passée d'une durée d'exécution de 8,5 minutes en parcourant chaque colonne sur chaque ligne et en vérifiant les limites de cette colonne, à une durée d'exécution de 4,5 SECONDES en vérifiant une ligne entière d'un seul coup ! Comme je l'ai dit, BOOYAH!
Re : Convertir une liste en matricePas sûr de la gestion de la mémoire ici. Mais puisque le NumberColBox n'est pas dessiné ou stocké dans une variable, je ne pense pas qu'il utilise ou verrouille des quantités importantes de mémoire.
Il semble également évoluer de manière linéaire : en boucle 10000x, 100000x et 1000000x, cela prend respectivement 0,27, 2,7 et 26,7 secondes. Aucune différence dans l'utilisation de la mémoire.
Appliquée à cette petite liste, la boîte de col numérique est environ 30 fois plus rapide que l'approche de table de données publiée ci-dessus. Pour les très longues listes - il peut y avoir une limite supérieure pour le nombre d'éléments qu'un NumberColBox peut contenir - la méthode du tableau de données peut être plus efficace.
Re : Convertir une liste en matricePour être parfait, j'ai fait ceci :
data = shape(Number Col Box("", dt[1,0]) << get as matrix, 1, N Cols(dt));Maintenant, étant donné des matrices construites de manière similaire pour les spécifications LSL/USL, je peux faire :
If( max(data < LSL) > 0 | max(data > USL) > 0, "FAIL", "PASS")
pour vérifier une ligne de données par rapport aux limites spécifiées dans les propriétés de la colonne, sans avoir à parcourir les colonnes pour chaque ligne - en prenant un processus mXn et en le transformant en un processus m+n.
Re : Convertir une liste en matricePratiquement parfait ! Question, qu'advient-il de la Number Col Box ? Reste-t-il en mémoire ou n'est-il créé que le temps nécessaire pour envoyer le message ?
Re : Convertir une liste en matriceC'est assez rapide :
MyList = {"a", 1, 2, "b"};
Mat = Number Col Box("", MyList) << get as matrix;Re : Convertir une liste en matriceEn fait, j'ai besoin des valeurs manquantes. Parfois, une valeur manquante n'est pas un problème, par exemple un test est ajouté ultérieurement lors de la création de colonnes supplémentaires dans l'ensemble de données. Les données antérieures ne sont pas hors spécifications pour les tests qui n'ont pas été effectués. Malheureusement, les données manquantes sont parfois un problème, les tests sont interrompus mais les résultats antérieurs sont conformes aux spécifications. Je n'ai pas encore compris comment gérer cela, mais je progresse.
Re : Convertir une liste en matriceEn regardant votre question initiale, vous vouliez une matrice de [1,2].J'ai ajouté dans une déclaration pour se débarrasser des valeurs manquantes
MyList = {"a", 1, 2, "b"} ;
dt = New Table("Temp",
New Column("C",Numeric,values(MyList)),
"Private"
);
dt << select where( ismissing(:c)) << delete rows;
Mat = dt << get as matrix;
Close(dt,"No Save");
Show(Mat);Re : Convertir une liste en matriceMerci, je vais essayer.
Re : Convertir une liste en matrice@MarkDayton ,
Je ne sais pas si l'utilisation d'un tableau de données est acceptable ? si oui, voilà. Étant donné que la table de données est privée, je m'attendrais à ce qu'elle soit plus que raisonnablement rapide pour des centaines de valeurs
MyList = {"a", 1, 2, "b"} ;
dt = New Table("Temp",
New Column("C",Numeric,values(MyList)),
"Private"
);
Mat = dt << get as matrix;
Close(dt,"No Save");
Show(Mat);