正規化された確率 (合計 1) の 3x3x3 行列 (MP) があります。sample(27,1, MP, replace = T) を実行すると、1 から 27 までの整数が返されます。これは、おそらく行列の連続インデックスです。要素インデックス (行番号、列番号、z 番号など) に関してどの行列要素を知りたいですか。N 次元 (この場合は N=3) の配列を構築する場合、要素の順序をどのように決定しますか? 言い換えれば、N 次元の配列を取得してすべての要素をリストに配置した場合、そのリストを N 次元の要素にマップするにはどうすればよいでしょうか?
質問する
208 次
2 に答える
0
技術的には、2 次元の場合は行列のみです。あなたが持っているのは三次元配列です。試してみると:
array( 1:27, dim = c(3, 3, 3) )
, , 1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
, , 2
[,1] [,2] [,3]
[1,] 10 13 16
[2,] 11 14 17
[3,] 12 15 18
, , 3
[,1] [,2] [,3]
[1,] 19 22 25
[2,] 20 23 26
[3,] 21 24 27
したがって、どのインデックスがどのシーケンシャル値に対応するかを出力から確認できます。たとえば、シーケンス 1:27 のアイテム 20 は [2, 1, 3] にあります。シーケンスは最初に列をカウントし、次に行、次に行列をカウントします。それを知っていれば、インデックスの保持についてそれほど心配する必要はありません。いつでもアレイを再作成できます。さらに、アイテムを実際にサンプルしたいだけの場合は、次のようにすることができます。
y <- array( 1:27, dim = c(3, 3, 3) ) / sum(1:27) # an array like yours
sample(y, 1)
または、配列全体をスクランブルしたい場合は、 を試すことができますsample(y)
。
ところで、サンプルを実行するときに、あなたが示しているように見えることを本当にやりたい場合は、sample.int
. より高性能です。
于 2013-07-16T03:54:55.293 に答える