¿Existe una manera rápida de hacer una lista grande sin un bucle for?Muchos lenguajes de programación tienen alguna forma.
Por ejemplo para hacer un lista del 1 al 100:
list = 1:100,
o
list = range(1,100)
o
list = {1..100}
o
list = seq(1,100)
¡Hágamelo saber! No pude encontrar nada en la guía de secuencias de comandos.
Re: ¿Existe una forma rápida de crear una lista grande sin un bucle for?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Esta herramienta de creación de perfiles te resultará útil.Gracias por compartirlo.
Parece que tienes razón, la razón por la que no parece ejecutarse más rápido es porque hay cuellos de botella más grandes en el código.Parece que el código de matriz "::" se ejecuta más rápido que el bucle for, que es intuitivo.Lo obtengo al comparar % en la línea 10+11 con % en la línea 31.
Mi código actual nunca comparará grandes conjuntos de datos, pero aún tenía curiosidad porque preveo crear scripts similares para grandes cantidades de datos y deshacerme de los bucles for es una forma general segura de hacer que el código sea más rápido.
Re: ¿Existe una forma rápida de crear una lista grande sin un bucle for?Buena prueba de rendimiento.
JSL tiene un generador de perfiles que puede ayudar a responder preguntas sobre rendimiento:

Lo ejecuté para obtener esto:

lo que me dice que establecer los valores en la matriz asociativa es un cuello de botella en este código.(línea 10 versus línea 11.) (La línea 23 probablemente incluye abrir el registro la primera vez, ignórelo; 42 es más representativo).
La clase grande sólo tiene 40 filas.Si tuviera muchas más filas (¿10K?), es posible que vea otros cuellos de botella.No llames a temparray<
Parece que está intentando crear una tabla de búsqueda de pequeños números enteros consecutivos para cada valor único en la columna.Puede que haya una forma inteligente de hacer esto, pero no la veo ahora.Tal vez alguien más lo haga... ¿tal vez alguna operación de unión a la base de datos?
Re: ¿Existe una forma rápida de crear una lista grande sin un bucle for?Gracias, esto es útil.Esperaba que esto acelerara mi código, pero siento que el bucle for tiene velocidades similares, lo cual me sorprende.¿Alguna sugerencia?
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
t1 = tick seconds();
numberarray = Function({list},
temparray = Associative Array(list);
tempnum = nitems(temparray << Get Keys);
tempitems = temparray << Get Keys;
templist = {};
For(l=1, l<=tempnum, l++, insertinto(templist, l));
temparray = Associative Array(tempitems, templist);
//return(temparray)
);
for(i=1, i<=100,i++,
array = numberarray( Column(dt, 1) );
array2 = numberarray( Column(dt, 2) );
array3 = numberarray( Column(dt, 3) );
array4 = numberarray( Column(dt, 4) );
array5 = numberarray( Column(dt, 5) ););
t2 = tick seconds();
Print( Concat( Char( t2 - t1 ), " seconds." ) );
t1 = tick seconds();
numberarray = Function({list},
temparray = Associative Array(list);
tempnum = nitems(temparray << Get Keys);
tempitems = temparray << Get Keys;
temparray = Associative Array(tempitems, 1::tempnum);
);
for(i=1, i<=100,i++,
array = numberarray( Column(dt, 1) );
array2 = numberarray( Column(dt, 2) );
array3 = numberarray( Column(dt, 3) );
array4 = numberarray( Column(dt, 4) );
array5 = numberarray( Column(dt, 5) ););
t2 = tick seconds();
Print( Concat( Char( t2 - t1 ), " seconds." ) );
Re: ¿Existe una forma rápida de crear una lista grande sin un bucle for?
a=3;
b=9;
AsList(a::b)[1]
Resultados en:
{3, 4, 5, 6, 7, 8, 9}
Aquí suceden varias cosas: a::b hace una matriz de una fila: [3 4 5 6 7 8 9]
AsList(...) convierte la matriz en una lista de listas (porque en realidad es bidimensional, siendo una de las dimensiones solo 1.
[1] extrae la lista interna.
Quizás sólo quieras la matriz en lugar de la lista.Si está interesado en el código rápido, utilice las funciones matriciales integradas cuando pueda.
Este no es un iterador mágico de algún otro lenguaje de programación; él voluntad cree la matriz y la lista completas en la memoria, por lo que probablemente no desee hacer una lista de mil millones de elementos.