3

ゼロで満たされた NxN 行列があります。ここで、行列に n 個の 1 と m 個の 2 個をランダムな場所に追加します。つまり、ランダムな場所に特定の数値の固定量があり、ランダムな場所に他の特定の数値の固定量がある可能性があるマトリックスを作成したいと考えています。どうすればいいですか?

Matlab では、randperm() を使用して行列インデックスのランダムな順列を作成し、行列の randperm によって指定された n 個の最初のインデックスを 1 で、次の m を 2 で埋めることによってこれを行います。

4

3 に答える 3

4

numpy.random.shuffle配列をその場でランダムに並べ替えるために使用できます。

>>> import numpy as np
>>> X = np.zeros(N * N)
>>> X[:n] = 1
>>> X[n:n+m] = 2
>>> np.random.shuffle(X)
>>> X = X.reshape((N, N))
于 2012-04-14T10:39:48.380 に答える
3

あなたnumpy.random.permutationが探しているものでしょうか?

次のようなことができます。

In [9]: a=numpy.zeros(100)

In [10]: p=numpy.random.permutation(100)

In [11]: a[p[:10]]=1

In [12]: a[p[10:20]]=2

In [13]: a.reshape(10,10)
Out[13]: 
array([[ 0.,  1.,  0.,  0.,  0.,  2.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  2.,  0.],
       [ 0.,  2.,  0.,  0.,  0.,  0.,  2.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  2.,  0.,  2.,  1.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  1.,  0.,  2.,  0.,  0.,  0.],
       [ 0.,  2.,  0.,  2.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  2.,  0.,  0.,  0.,  1.,  0.]])

ここでは、ランダム順列を作成し、順列から取得した最初の 10 個のインデックスaを 1 に設定し、次の 10 個のインデックスを 2 に設定します。

于 2012-04-14T10:38:50.790 に答える
1

1と2を追加する場所の要素のインデックスを生成するには、これはどうでしょうか。

# assuming N, n and m exist.
In [1]: import random
In [3]: indices = [(m, n) for m in range(N) for n in range(N)]
In [4]: random_indices = random.sample(indices, n + m)
In [5]: ones = random_indices[:n]
In [6]: twos = random_indices[n:]

onesとでインデックスが重複しないように、PetrViktorinのコメントに従って修正されましたtwos

インデックスを生成する別の方法:

In [7]: import itertools
In [8]: indices = list(itertools.product(range(N), range(N)))
于 2012-04-14T10:20:09.283 に答える