Me refiero al entrelazado como en las técnicas de video entrelazado más antiguas, donde las líneas de píxeles en su pantalla se renderizarían en un patrón alterno de cada segundo o cada tercer fila. ( https://en.wikipedia.org/wiki/Interlaced_video tiene un buen gif del proceso)
así que si tienes tus filas (1,2,3,4, ..... 99)
se mostrarían (factor 2) en las filas de orden (1,3,5,7 ...... 97,99,2,4,6, ..... 98)
o (factor 3) como filas (1,4,7 ..... 2,5,8 ..... 3,6,9 ....)
Estoy tratando de escribir un script que reordenará una secuencia de longitud arbitraria de acuerdo con este patrón con JSL, pero no puedo entender cómo construir un índice para reordenar esto. Actualmente estoy tratando de resolver las matemáticas matriciales para lograr esto, pero tal vez un bucle for sería más inteligente / más fácil.
// Create arbitrary sequence
a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,21,22,23,24,25,26,27,28];
f = 3 // interlacing factor<BR />
//Start trying to work out an index or grouping for a future sorting op
b = mod(a+f-1),3);
//b = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 2, 0, 1, 2, 0, 1, 2, 0]<BR />
// ????
EDITAR: Tuve que agregar un índice al final para evitar "comenzar de nuevo" cuando el factor no divide uniformemente el número de filas.
/////////////
Hola,
Consulte el comando Shape (). Además de la transposición, puede obtener lo que busca:
Names Default To Here(1);
a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,21,22,23,24,25,26,27,28];
fact = 3;
shape(shape(a, ceiling(nrow(a)/fact))`, 1)`[1::nrow(a)]
Salud,
Brady
Esto parece estar obteniendo matrices correctas (podría requerir la transposición si la matriz inicial se construye de manera diferente)
Names Default To Here(1);
// Create arbitrary sequence
a = 1::30;
f = 3;
b = Mod(a+f-1,f);
m_interlaced = [];
For(i = 0, i <= f-1, i++,
m_interlaced = m_interlaced |/ a[Loc(b, i)];
);
show(m_interlaced);
Names Default To Here(1);
// Create arbitrary sequence
a = 1::99;
f = 2;
b = Mod(a+f-1,f);
m_interlaced = [];
For(i = 0, i <= f-1, i++,
m_interlaced = m_interlaced |/ a[Loc(b, i)];
);
show(m_interlaced);