从二元numpy矩阵的每一行中选择一个随机的?

时间:2014-02-19 15:33:21

标签: python numpy matrix

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

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

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

现在我找到每行的max(因为max函数返回一个索引)并将其设置为零。如果所有行最多只有2个但如果超过2则失败,那么它可以工作。

2 个答案:

答案 0 :(得分:3)

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

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

您可以使用x中随机抽取的1来填充另一个数组:

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

答案 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])