Вы хотите создать подмассив, содержащий только те значения, индексы которых находятся в desired_ages
.
В Python нет синтаксиса, прямо соответствующего этому, но списочные выражения могут выполнять довольно хорошую работу:
result = [value for index, value in enumerate(data.values) if index in desired_ages]
Тем не менее, выполнение этого способа приводит к сканированию Python через desired_ages
для каждого элемента в data.values
, что является медленным.Если бы вы могли вставить
desired_ages = set(desired_ages)
в строку ранее, это улучшило бы производительность.(Вы можете определить, является ли значение в постоянным временем, независимо от размера набора.)
Полный пример
import numpy as np
ages = np.arange(100)
values = np.random.uniform(low=0, high= 1, size = ages.shape)
data = np.core.rec.fromarrays([ages, values], names='ages,values')
desired_ages = np.array([1,4, 16, 29, 80])
result = [value for index, value in enumerate(data.values) if index in desired_ages]
print result
Вывод
[0.45852624094611272, 0.0099713014816563694, 0.26695859251958864, 0.10143425810157047, 0.93647796171383935]