インターレースパターンに従ってリストまたは列を並べ替えるここで言うインターレースとは、画面上のピクセルの行が 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);