从numpy 2D阵列中随机选择特定百分比的单元格

时间:2017-07-21 18:49:10

标签: python numpy

我有人。 2D numpy数组:

array([[[-32768, -32768, -32768, ..., -32768, -32768, -32768],
        [-32768, -32768, -32768, ..., -32768, -32768, -32768],
        [-32768, -32768, -32768, ..., -32768, -32768, -32768],
        ..., 
        [-32768, -32768, -32768, ..., -32768, -32768, -32768],
        [-32768, -32768, -32768, ..., -32768, -32768, -32768],
        [-32768, -32768, -32768, ..., -32768, -32768, -32768]]], dtype=int16)

具有以下唯一值:

array([-32768,    401,    402,    403,    404], dtype=int16)

有没有办法可以创建一个新阵列,其中10%的401单元格变为500?我可以使用np.random.random_sample()来启动但不能如何选择指定百分比的单元格(例如,这个numpy 2D数组中的10%)

1 个答案:

答案 0 :(得分:2)

a表示您的数组。然后这将完成工作:

locs=np.vstack(np.where(a==401)).T
n=len(locs)
changes_loc=np.random.permutation(locs)[:n//10]
a[changes_loc[:,0],changes_loc[:,1]]=500

这是一个小例子(使用不同的数字和25%而不是10%,只是为了描述行为):

a=np.array([[1,2,3],[4,1,5],[1,1,7]])
locs=np.vstack(np.where(a==1)).T
n=len(locs)
changes_loc=np.random.permutation(locs)[:n//4]
a[changes_loc[:,0],changes_loc[:,1]]=70

结果是

array([[70,  2,  3],
       [ 4,  1,  5],
       [ 1,  1,  7]])