我有这个数组:
rel=np.array([1,0,0,1,1,0,1,0,1,0,0])
和
eta=np.array([2,3,10,16,4,3])
其中eta由与rel中的0元素对应的元素组成。换句话说,eta [0] = 2与rel [1] = 0有关,eta [1] = 3与rel [2] = 0有关,eta [2] = 10对应rel [5] = 0等等。
从rel我随机提取一些元素,例如
rel_extract=np.array([1,0,0,1,0])
其中null元素位于第1,第2和第4个索引处。
我如何使用eta中的值创建一个名为eta_extract的数组,考虑到eta_extract是用相同的eta规则制作的?我想eta_extract应该是
eta_extract=array([10,16,3])
非常感谢
答案 0 :(得分:0)
您可以创建一个长度为rel
的临时零数组。然后获得零rel
的索引。然后将temp数组中的索引映射到rel
的值。最后,生成一些rel
的随机索引,并在eta
的值为零的索引处获取rel
的关联值。
# An array of zeros of length rel
tmp = np.zeros(rel.shape[0])
# Indices of rel that are zero
zero_rel_loc = np.where(rel == 0)
# Map the value from rel to tmp
tmp[zero_rel_loc] = eta
# Generate a subset of size 5 of indices/values from rel
i = np.arange(rel.shape[0])
rand_ind = np.random.choice(i, 5, replace=False)
rand_eta_val = tmp[rand_ind]
# Remove the extra zeros
result = rand_eta_val[np.where(rand_eta_val != 0)]