Numpy 稀疏矩阵每行1个
我想生成一个随机矩阵Numpy 稀疏矩阵每行1个,numpy,Numpy,我想生成一个随机矩阵MxN,其中每一行都只有一个处于随机位置的行。 例如,我想要这样一个矩阵: Out[3]: array([[1, 0, 0], [0, 1, 0], [0, 1, 0], [1, 0, 0], [0, 0, 1]]) 我试过了 M = 5 N = 3 arr = np.array([1] + [0] * (N-1)) arr = np.tile(arr,(M,1)) np.random.shuffle(arr)
MxN
,其中每一行都只有一个处于随机位置的行。
例如,我想要这样一个矩阵:
Out[3]:
array([[1, 0, 0],
[0, 1, 0],
[0, 1, 0],
[1, 0, 0],
[0, 0, 1]])
我试过了
M = 5
N = 3
arr = np.array([1] + [0] * (N-1))
arr = np.tile(arr,(M,1))
np.random.shuffle(arr)
但它给出了:
Out[75]:
array([[1, 0, 0],
[1, 0, 0],
[1, 0, 0],
[1, 0, 0],
[1, 0, 0]])
也许有一种更优雅的方法可以做到这一点,但它是有效的:
def randOne():
M = 5
N = 3
arr = np.zeros((M, N))
for row in range(M):
arr[row, np.random.randint(N)] = 1
return arr
>>> randOne() array([[ 0., 0., 1.],
[ 1., 0., 0.],
[ 0., 0., 1.],
[ 0., 1., 0.],
[ 1., 0., 0.]])
或
是的,有一种更优雅的方法可以做到这一点;)
fs我必须生成的随机双流,比如1111000111010110000,也就是说,连续双流的数量是随机的,这取决于你需要做的事情的时间,比如
ones=np.random.randint(7)'1'*ones+'0'*(7-ones)
def randOne2(M=5, N=3):
arr = np.zeros((M, N), dtype=np.int8)
arr[np.arange(M),np.random.randint(0,N,M)] = 1
return arr
>>> randOne2()
array([[0, 0, 1],
[1, 0, 0],
[1, 0, 0],
[0, 1, 0],
[1, 0, 0]], dtype=int8)