如何将numpy数组中的元素随机设置为0

时间:2018-01-31 07:43:34

标签: python numpy

首先我创建我的数组

myarray = np.random.random_integers(0,10, size=20)

然后,我想将数组中20%的元素设置为0(或其他一些数字)。我该怎么做?戴口罩?

4 个答案:

答案 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 

该数组现已被屏蔽。