Python 从二进制numpy矩阵的每一行中随机选择一个?
假设我有一个二进制矩阵。我想把这个矩阵转换成另一个矩阵,其中每一行都有一个矩阵,并且每一行的索引都是随机的 例如,如果其中一行是Python 从二进制numpy矩阵的每一行中随机选择一个?,python,numpy,matrix,Python,Numpy,Matrix,假设我有一个二进制矩阵。我想把这个矩阵转换成另一个矩阵,其中每一行都有一个矩阵,并且每一行的索引都是随机的 例如,如果其中一行是[0,1,0,1,0,0,1],我将其转换为[0,0,0,1,0,0],在这里我们随机选择1的索引 我怎么能在numpy做呢 目前,我找到每行的max(因为max函数返回一个索引),并将其设置为零。如果所有行最多有2个1,则它可以工作,但如果超过2个,则它将失败。我想使用np.argsort获取非零元素的索引: In [351]: a=np.array([0,1,0,1
[0,1,0,1,0,0,1]
,我将其转换为[0,0,0,1,0,0]
,在这里我们随机选择1的索引
我怎么能在numpy做呢
目前,我找到每行的max(因为max函数返回一个索引),并将其设置为零。如果所有行最多有2个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])
扩展@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
您可以将
a.argsort()[-np.count\u nonzero(a):]
替换为np.where(a)[0]
。为什么要使用“Matlab”标签?你也想要Matlab中的答案吗?