#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. Ошибка не совсем, думаете, это просто добавит все значения из одного массива в другой? Я пытаюсь использовать массив для извлечения значений из набора данных путем индексации набора данных элементами первого массива. Затем я хотел бы добавить эти полученные значения в новый массив. В любом случае, спасибо!