Извлечение элементов из массива Python - PullRequest
0 голосов
/ 06 мая 2018

У меня есть этот массив:

rel=np.array([1,0,0,1,1,0,1,0,1,0,0])

и

eta=np.array([2,3,10,16,4,3])

где eta состоит из элементов, которые соответствуют 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_extract создан с тем же правилом eta? Я думаю, что eta_extract должен быть

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

Большое спасибо

1 Ответ

0 голосов
/ 06 мая 2018

Вы можете создать временный массив нулей длиной 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)]
...