Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从二进制numpy矩阵的每一行中随机选择一个?_Python_Numpy_Matrix - Fatal编程技术网

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中的答案吗?