如何将二进制数组打乱特定数量
how to shuffle a binary array a specific amount
我有一个二进制数组。我想打乱它,使 n% 的随机元素留在同一个地方,其余的被打乱。另一种说法是,我有一个二进制数组,我想创建第二个长度相同的数组,并且与使用 difflib[=12= 的第一个数组相比,n% 相似]
我正在使用
random.shuffle
打乱数组,但找不到有关我问题的百分比部分的信息。
import random
array = [1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0]
random.shuffle(array)
print(array)
如果您愿意使用 numpy,您可以创建一个布尔掩码来提取 arr 的大约 n 部分,打乱抽取的样本,然后将打乱的结果放回掩码位置。
import numpy as np
n = 0.2
arr = np.array([1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0])
# create boolean mask of about fraction n
ix = np.random.choice([True, False], size=arr.size, replace=True, p=[n, 1-n])
# pull the masked portion and shuffle
arr_shuff = arr[ix]
np.random.shuffle(arr_shuff)
# reinsert
arr[ix] = arr_shuff
arr
# returns:
array([1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0])
我认为您不会为此找到标准函数。
您可以将 n * len(array) 与数组中的其他项交换:
import random
array = [1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0]
n = 0.2
for i in range(int(n*len(array))):
ri = random.randrange(len(array))
array[i], array[ri] = array[ri], array[i]
print(array)
但是,如果数组只填充了零或一个,你将不会得到差异。
我有一个二进制数组。我想打乱它,使 n% 的随机元素留在同一个地方,其余的被打乱。另一种说法是,我有一个二进制数组,我想创建第二个长度相同的数组,并且与使用 difflib[=12= 的第一个数组相比,n% 相似]
我正在使用
random.shuffle
打乱数组,但找不到有关我问题的百分比部分的信息。
import random
array = [1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0]
random.shuffle(array)
print(array)
如果您愿意使用 numpy,您可以创建一个布尔掩码来提取 arr 的大约 n 部分,打乱抽取的样本,然后将打乱的结果放回掩码位置。
import numpy as np
n = 0.2
arr = np.array([1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0])
# create boolean mask of about fraction n
ix = np.random.choice([True, False], size=arr.size, replace=True, p=[n, 1-n])
# pull the masked portion and shuffle
arr_shuff = arr[ix]
np.random.shuffle(arr_shuff)
# reinsert
arr[ix] = arr_shuff
arr
# returns:
array([1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0])
我认为您不会为此找到标准函数。 您可以将 n * len(array) 与数组中的其他项交换:
import random
array = [1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0]
n = 0.2
for i in range(int(n*len(array))):
ri = random.randrange(len(array))
array[i], array[ri] = array[ri], array[i]
print(array)
但是,如果数组只填充了零或一个,你将不会得到差异。