Используйте индекс одного массива для извлечения значения из списка для добавления в новый массив (Python)

#python #arrays #numpy #for-loop #indexing

#python #массивы #numpy #for-цикл #индексирование

Вопрос:

Если у меня есть один numpy массив, содержащий набор индексов, как мне применить эти индексы к списку данных, который, в свою очередь, извлечет соответствующие значения данных и добавит их в новый numpy массив?

Код, который я пытался использовать, был следующим:

 second_index = np.zeros(len(first_index))

for i in range(len(first_index)):
    second_index[i] = data[first_index[i]]
print(second_index)
 

Оба first_index и second_index являются одномерными numpy массивами, и я ожидал бы увидеть одинаковое количество элементов в обоих first_index и second_index . Однако я получаю следующее сообщение об ошибке

 TypeError: list indices must be integers or slices, not numpy.float64
 

Должен ли я вместо этого использовать вложенный for-loops и выполнять цикл в двух разных диапазонах?

Спасибо за любые предложения!

Комментарии:

1. Не могли бы вы предоставить данные и ожидаемый результат.?

2. Итак, список данных выглядит следующим образом: data = [0.5,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18] . Первый индекс выглядит следующим образом: first_index = [7,17] . Итак, на данный момент ожидаемый результат окончательного индекса должен быть: second_index = [7,17] . Как вы можете видеть, это связано с тем, что 7-й и 17-й элементы индекса данных равны 7 и 17 соответственно, поэтому, хотя поначалу это может показаться тривиальным для использования первого индекса, я хотел бы иметь возможность использовать second_index в случае изменения массива данных. Надеюсь, это объяснение было в порядке? Спасибо

3. Дайте мне знать, если этот ответ поможет.. ваш запрос немного сбивает с толку, поэтому я тщательно уточню данные

4. Чтобы уточнить, были ли данные data = [2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36] вместо этого, и учитывая, что first_index = [7,17] , то результат, который я надеюсь получить second_index = [14,34] . Надеюсь, это немного прояснит ситуацию?

5. @swag2198 да, это правильно, большое спасибо за ваше предложение ниже — все работает отлично!

Ответ №1:

Вы можете напрямую индексировать с помощью numpy массивов:

 >>> import numpy as np
>>> data = np.array([2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36])
>>> first_index = np.array([7, 17])
>>> second_index = data[first_index]
>>> second_index
array([16, 36])
 

Ответ №2:

 ex= [0.5,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
newarr=[]
for i in range(len(ex)):
    newarr.append(ex[i])
print(newarr) 

[0.5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
 

Это вы ищете ..?

Комментарии:

1. Ошибка не совсем, думаете, это просто добавит все значения из одного массива в другой? Я пытаюсь использовать массив для извлечения значений из набора данных путем индексации набора данных элементами первого массива. Затем я хотел бы добавить эти полученные значения в новый массив. В любом случае, спасибо!