1

正規化された確率 (合計 1) の 3x3x3 行列 (MP) があります。sample(27,1, MP, replace = T) を実行すると、1 から 27 までの整数が返されます。これは、おそらく行列の連続インデックスです。要素インデックス (行番号、列番号、z 番号など) に関してどの行列要素を知りたいですか。N 次元 (この場合は N=3) の配列を構築する場合、要素の順序をどのように決定しますか? 言い換えれば、N 次元の配列を取得してすべての要素をリストに配置した場合、そのリストを N 次元の要素にマップするにはどうすればよいでしょうか?

4

2 に答える 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 に答える