在python / numpy中随机位置给定数字的矩阵

时间:2012-04-14 10:13:00

标签: python random matrix numpy

我有一个用零填充的NxN矩阵。现在我想添加到矩阵,比如n个和m两个到随机位置。即我想创建一个矩阵,其中在随机位置存在一定数量的给定数量,并且可能在随机位置具有固定数量的其他给定数量。我该怎么做?

在Matlab中,我会通过用randperm()对矩阵索引进行随机排列,然后填充矩阵的randperm给出的n个第一个索引,其中包括1和m,接下来是两个。

3 个答案:

答案 0 :(得分:3)

您可以使用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))

答案 1 :(得分:2)

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.]])

这里我们创建一个随机排列,然后将从a中的排列取得的前10个索引设置为1,然后将接下来的10个索引设置为2。

答案 2 :(得分:0)

要生成添加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:]

由Petr Viktorin评论,以便onestwos中没有重叠索引。

生成索引的另一种方法:

In [7]: import itertools
In [8]: indices = list(itertools.product(range(N), range(N)))