Convertir lista a matriz¿Cuál es la forma más rápida de convertir una lista: {"a", 1, 2, "b"} en una matriz: [. 1 2 .]?
Espero poder recorrer todos los elementos, pero espero que haya una forma más rápida, ya que haré esto miles de veces en mi aplicación, y cada lista contiene cientos de elementos.
Re: Convertir lista a matriz¡BOYAH!, ¡Declarando la victoria y yendo a casa! En mi tabla de datos con 30 000 filas y 150 columnas, mi rutina pasó de un tiempo de ejecución de 8,5 minutos recorriendo cada columna en cada fila y comprobando los límites de esa columna, a un tiempo de ejecución de 4,5 SEGUNDOS comprobando una fila completa de una sola vez. Como dije, ¡BOOYAH!
Re: Convertir lista a matrizNo estoy seguro sobre el manejo de la memoria aquí. Pero dado que NumberColBox no se dibuja ni almacena en una variable, no creo que use o bloquee cantidades significativas de memoria.
También parece escalar linealmente: si se repite 10000x, 100000x y 1000000x, se tarda 0,27, 2,7 y 26,7 segundos, respectivamente. No hay diferencia en el uso de la memoria.
Aplicado a esta pequeña lista, el cuadro de columnas numéricas es aproximadamente 30 veces más rápido que el enfoque de la tabla de datos publicado anteriormente. Para listas muy largas, puede haber un límite superior para la cantidad de elementos que puede contener un NumberColBox, el método de la tabla de datos puede ser más eficiente.
Re: Convertir lista a matrizPara ser perfecto, hice esto:
data = shape(Number Col Box("", dt[1,0]) << get as matrix, 1, N Cols(dt));Ahora, dadas matrices construidas de manera similar para las especificaciones LSL/USL, puedo hacer:
If( max(data < LSL) > 0 | max(data > USL) > 0, "FAIL", "PASS")
para verificar una fila de datos contra los límites especificados en las propiedades de la columna, sin tener que recorrer las columnas para cada fila, tomando un proceso mXn y convirtiéndolo en un proceso m+n.
Re: Convertir lista a matriz¡Prácticamente perfecto! Pregunta, ¿qué sucede con el cuadro de columna de número? ¿Permanece en la memoria o solo se crea el tiempo suficiente para enviar el mensaje?
Re: Convertir lista a matrizEsto es bastante rápido:
MyList = {"a", 1, 2, "b"};
Mat = Number Col Box("", MyList) << get as matrix;Re: Convertir lista a matrizEn realidad necesito los valores que faltan. A veces, un valor faltante no es un problema, por ejemplo, se agrega una prueba más tarde al crear columnas adicionales en el conjunto de datos. Los datos anteriores no están fuera de especificación para las pruebas que no se realizaron. Desafortunadamente, a veces la falta de datos es un problema, la prueba se cancela pero los resultados anteriores están dentro de las especificaciones. Todavía no he descubierto cómo lidiar con eso, pero estoy progresando.
Re: Convertir lista a matrizEn cuanto a su pregunta original, quería una matriz de [1,2].He agregado en una declaración para deshacerme de los valores faltantes.
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 lista a matrizGracias, lo intentaré.
Re: Convertir lista a matriz@MarkDayton ,
No sé si usar una tabla de datos está bien. si es así, aquí tienes. Dado que la tabla de datos es privada, esperaría que fuera más que razonablemente rápida para cientos de valores
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);