从 numpy 数组中提取元素 python

Extract elements from a numpy array python

我有这个数组:

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])

空元素位于第 1、第 2 和第 4 个索引处。

考虑到 eta_extract 是使用相同的 eta 规则创建的,我如何使用 eta 中的值创建一个名为 eta_extract 的数组?我猜 eta_extract 应该是

eta_extract=array([10,16,3])

非常感谢

您可以创建一个长度为 rel 的临时零数组。然后获取 rel 的索引为零。然后将临时数组中的那些索引映射到 rel 的值。最后,生成一些 rel 的随机索引,并在 rel 的值为零的那些索引处获得 eta 的关联值。

# 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)]