numpy random.choice 未被选择的元素
我有一个数组A,如下所示:
import numpy as np
A = np.random.sample(100)
我想从A中随机创建两个子集,合在一起能得到A。
inx = np.random.choice(np.arange(100), size=70, replace=False)
S1 = A[inx]
所以,S1是其中一个子集,现在我该如何构建S2,使得S2包含A中所有不在S1里的元素;换句话说,S2=A-S1。
3 个回答
3
(小问题:如果A可以有重复的元素,那么选择索引的补集和让S2包含所有不在S1中的A的元素并不是一回事。)
我可能完全不考虑索引,而是先打乱元素的顺序,然后再分开结果:
>>> A = np.random.sample(10)
>>> S1, S2 = np.split(np.random.permutation(A), [7])
>>> S1
array([ 0.97128145, 0.5617039 , 0.42625808, 0.39108218, 0.52366291,
0.73606525, 0.5279909 ])
>>> S2
array([ 0.45652426, 0.38622805, 0.99084781])
不过还有一个方法是使用 np.setdiff1d
,所以如果你已经有了 S1
:
>>> S2 = np.setdiff1d(A, S1)
>>> S2
array([ 0.38622805, 0.45652426, 0.99084781])
3
我觉得这段代码和你想要做的事情是一样的。
A = np.random.sample(100)
T = A[:]
np.random.shuffle(T)
size = 70
S1 = T[:size]
S2 = T[size:]
7
集合操作可能会有帮助:
S2 = A[list(set(range(100)) - set(inx))]
不过你可能需要先排序:
S2 = A[ sorted(list(set(range(100)) - set(inx))) ]