2014-02-19 60 views
2

假设我有一个二进制矩阵。我想将该矩阵转换为另一个矩阵,其中每行都有单个矩阵,并且该矩阵的索引对于每行都是随机的。从二进制numpy矩阵的每一行中选择随机的一个?

例如,如果其中一行是[0,1,0,1,0,0,1],我将它转换为[0,0,0,1,0,0,0],我们随机选择1的索引。

我怎么能在numpy中做到这一点?

目前我发现每行的最大值(因为max函数返回一个索引)并将其设置为零。它适用于所有行最多有2个,但如果超过2个则失败。

+1

为什么“Matlab”标签?你也想在Matlab中得到答案吗? –

回答

3

扩展@ zhangxaochen的答案,给出一个随机二进制数组

x = np.random.random_integers(0, 1, (8, 8)) 

可以填充另一个用随机抽取的1个从x

y = np.zeros_like(x) 
ind = [np.random.choice(np.where(row)[0]) for row in x] 
y[range(x.shape[0]), ind] = 1 
2

我想使用np.argsort得到非零元素的索引:

In [351]: a=np.array([0,1,0,1,0,0,1]) 

In [352]: from random import choice 
    ...: idx=choice(np.where(a)[0]) #or np.nonzero instead of np.where 

In [353]: b=np.zeros_like(a) 
    ...: b[idx]=1 
    ...: b 
Out[353]: array([0, 1, 0, 0, 0, 0, 0]) 
+0

你可以用'np.where(a)[0]'替换'a.argsort()[ - np.count_nonzero(a):]'。 –

+0

@BiRico对那个丑陋的代码感到抱歉。编辑:) – zhangxaochen

相关问题