我有人。 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%)
答案 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]])