繁体   English   中英

将多个整数向量的数组更改为Numpy中每个向量的单个值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM