私はNxNの行列に0を埋めました。今、私は行列に、例えばn個のものとm個のものをランダムな場所に追加したいと思います。私。ランダムな場所に一定数の固定量があり、ランダムな場所に一定数の固定量がある行列を作成したい。これはどうすればいいですか?python/numpyのランダムな場所に与えられた数字の行列
Matlabでは、randperm()で行列インデックスをランダムに並べ替えた後、行列のrandpermで与えられたn個の最初のインデックスを1で、mを次に2で埋めます。
私はNxNの行列に0を埋めました。今、私は行列に、例えばn個のものとm個のものをランダムな場所に追加したいと思います。私。ランダムな場所に一定数の固定量があり、ランダムな場所に一定数の固定量がある行列を作成したい。これはどうすればいいですか?python/numpyのランダムな場所に与えられた数字の行列
Matlabでは、randperm()で行列インデックスをランダムに並べ替えた後、行列のrandpermで与えられたn個の最初のインデックスを1で、mを次に2で埋めます。
1と2を追加する場所の要素のインデックスを生成するには、これはどうですか? ones
とtwos
にインデックスを重複していないためにペトルViktorinでコメントして修正し
# 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:]
。
インデックスを生成するための別の方法:
In [7]: import itertools
In [8]: indices = list(itertools.product(range(N), range(N)))
はnumpy.random.permutation
あなたが探しているものだろうか?
あなたはこのような何か行うことができます:ここでは、2
に1にa
で順列から取られた最初の10個の指標は、次の10個の指標を設定し、その後、ランダムな順列を作成
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.]])
を
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))
潜在的な問題点:[シャッフル](http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.shuffle.html)が1つの軸に沿ってのみ並び替えるので、1次元配列をシャッフルするように注意してください。 –
"ones"と "twos"は重複する可能性があります。 '' random_indices = random.sample(indices、n + m)を行う方が良い。 ones = random_indices [:n]; twos = random_indices [n:] ''。これはPythonの[random.sample](http://docs.python.org/library/random.html#random.sample)で、[numpy.random.choice](http://docs.scipy。 org/doc/numpy/reference/generated/numpy.random.choice.html#numpy.random.choice); [numpy.random.sample](http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.sample.html)は何か他のことを行います。 –
確かに、私はこの可能性に取り組んでいませんでした。ありがとう。 – phant0m