私は、画面上のピクセルの線が2行ごとまたは3行ごとに交互のパターンでレンダリングされる、古いインターレースビデオ技術のようにインターレースについて言及しています。 (( https://en.wikipedia.org/wiki/Interlaced_videoプロセスの良いgifがあります)
したがって、行がある場合(1,2,3,4、..... 99)
それらは行(1,3,5,7 ...... 97,99,2,4,6、..... 98)の順序でレンダリングされます(ファクター2)。
または(ファクター3)行として(1,4,7 ..... 2,5,8 ..... 3,6,9 ....)
JSLを使用して、このパターンに従って任意の長さのシーケンスを並べ替えるスクリプトを作成しようとしていますが、これを並べ替えるためのインデックスを作成する方法がわかりません。 私は現在、これを達成するために行列計算を実行しようとしていますが、forループの方が賢く/簡単でしょうか?
// 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 />
// ????
編集:ファクターが行数を均等に分割しない場合に「最初からやり直す」のを防ぐために、最後にインデックスを追加する必要がありました。
/////////////
こんにちは、
Shape()コマンドを確認してください。 転置に加えて、あなたはあなたが求めているものを手に入れることができます-
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)]
乾杯、
ブレイディ
これは正しい行列を取得しているようです(開始行列が異なる方法で作成されている場合は転置が必要になる場合があります)
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);
JMP14では、これは「引数はリストである必要があります」を返します。Loc関数でbが呼び出される場所を参照していると思います。 list()としてbを変更しようとしましたが、結果がわかりません。
これとは別に、| /は何をし、concat演算子||に関連していますか?
a = 1::30;
f = 3;
b = as list(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);
/*:
m_interlaced = [](0, 1);