首先我创建我的数组
myarray = np.random.random_integers(0,10, size=20)
然后,我想将数组中20%的元素设置为0(或其他一些数字)。我该怎么做?戴口罩?
答案 0 :(得分:5)
您可以使用np.random.choice
计算指数,将所选指数的数量限制为百分比:
indices = np.random.choice(np.arange(myarray.size), replace=False,
size=int(myarray.size * 0.2))
myarray[indices] = 0
答案 1 :(得分:1)
如果您希望20%是随机的:
random_list = []
array_len = len(myarray)
while len(random_list) < (array_len/5):
random_int = math.randint(0,array_len)
if random_int not in random_list:
random_list.append(random_int)
for position in random_list:
myarray[position] = 0
return myarray
这样可以确保您获得20%的值,并且RNG多次滚动相同的数字不会导致少于20%的值为0。
答案 2 :(得分:1)
使用np.random.permutation
作为随机索引生成器,并获取索引的前20%。
myarray = np.random.random_integers(0,10, size=20)
n = len(myarray)
random_idx = np.random.permutation(n)
frac = 20 # [%]
zero_idx = random_idx[:round(n*frac/100)]
myarray[zero_idx] = 0
答案 3 :(得分:0)
对于其他在nd数组下寻找答案的用户,如holi用户所建议:
my_array = np.random.rand(8, 50)
indices = np.random.choice(my_array.shape[1]*my_array.shape[0], replace=False, size=int(my_array.shape[1]*my_array.shape[0]*0.2))
我们将尺寸乘以一个长度为dim1 * dim2的数组,然后将这个索引应用于我们的数组:
my_array[np.unravel_index(indices, my_array.shape)] = 0
该数组现已被屏蔽。