[英]Change Array of multi integer vectors to single value for each vector in Numpy
我在下面有一个数组,我想让每一行随机地有一个1或全部为零,但只有当前的1个值可以转换为0.我在下面检查是否会通过查看是否有行中的1,如果求和值大于或者为0.我希望有一个简单的方法来做到这一点,目前正在逃避我。
A = np.array([
[ 0 , 1 , 1 , 0 , 1 ] ,
[ 1 , 0 , 0 , 1 , 1 ] ,
[ 0 , 0 , 1 , 0 , 0 ] ,
[ 0 , 1 , 0 , 0 , 1 ] ,
[ 1 , 0 , 0 , 0 , 0 ] ,
[ 0 , 0 , 1 , 1 , 0 ] ,
[ 0 , 0 , 0 , 0 , 0 ] ,
[ 1 , 0 , 1 , 0 , 0 ] ,
[ 1 , 0 , 1 , 1 , 1 ] ,
[ 0 , 0 , 1 , 1 , 0 ] ,
[ 0 , 1 , 0 , 1 , 0 ] ,
[ 0 , 1 , 0 , 0 , 1 ] ,
[ 0 , 0 , 1 , 1 , 0 ] ,
[ 0 , 1 , 1 , 0 , 1 ] ,
[ 0 , 0 , 1 , 0 , 0 ] ])
if np.any(A[0] == 1)==True and np.sum(A[0])>=0:
change row to all 0's randomly or keep one of the existing 1 values randomly. Ideally, if it could do it to the whole array, it would be very useful, but row by row is fine.
您可以在每行中随机选择要保留的列:
m, n = A.shape
J = np.random.randint(n, size=m)
您可以使用它们来创建新数组:
I = np.arange(m)
B = np.zeros_like(A)
B[I,J] = A[I,J]
或者如果要修改A
,例如使用位移:
I = np.arange(m)
A[I,J] <<= 1
A >>= 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.