Чтобы сбросить индекс массива NumPy в Python после таких операций, как нарезка, использование np.arange или изменение формы с помощью Flatten(), мы можем создать новый массив из измененного. Этот процесс эффективно переиндексирует элементы, начиная с нуля.
Например, после разрезания массива восстановите его с помощью np.array(sliced_array), чтобы сбросить его индексы. Аналогичным образом используйте np.arange для создания последовательных индексов для условно выбранных элементов, а после выравнивания массива воссоздайте его для сброса индексов.
Массивы NumPy в Python представляют собой n-мерные объекты массива, и доступ к каждому элементу массива осуществляется по его позиции или «индексу». Индексация в NumPy начинается с нуля, то есть индекс первого элемента равен 0, второго — 1 и так далее.
Существует три различных сценария сброса индекса массива NumPy в Python. Давайте рассмотрим их один за другим, используя несколько наглядных примеров.
- 1. Путем создания нового массива
- 2. С использованием np.arange с условным выбором
- 3. С изменением формы
1. Путем создания нового массива
Когда мы нарезаем массив NumPy в Python, мы можем создать новый массив, который ссылается на подмножество исходного массива. Однако индексы в срезанном массиве по-прежнему соответствуют своим позициям в исходном массиве.
В некоторых случаях нам может потребоваться, чтобы NumPy сбросил индекс массива в Python, начиная с 0.
Например:
import numpy as np temps = np.array([68, 70, 72, 74, 76, 78, 80]) weekend_temps = temps[3:] reset_index_temps = np.array(weekend_temps) print("Original indices and temperatures:", list(enumerate(temps))) print("Reset indices and temperatures:", list(enumerate(reset_index_temps)))
Выход:
Original indices and temperatures: [(0, 68),(1, 70),(2, 72),(3, 74),(4, 76),(5, 78),(6, 80)] Reset indices and temperatures: [(0, 74),(1, 76),(2, 78),(3, 80)]
На снимке экрана ниже визуально представлен результат выполнения кода в PyCharm.
2. С использованием np.arange с условным выбором
Когда мы применяем условие к массиву NumPy и выбираем элементы на основе этого условия, мы можем получить непоследовательные индексы. Это может упростить сброс индекса массива NumPy в Python.
Например:
import numpy as np populations = np.array([8.4, 3.9, 2.7, 1.6, 0.7]) large_cities = populations > 2 selected_cities = populations[large_cities] reset_index_cities = np.arange(1, selected_cities.size + 1) print("Original indices and populations:", list(enumerate(populations))) print("Reset indices for large cities:", list(enumerate(selected_cities, start=1)))
Выход:
Original indices and populations: [(0, 8.4),(1, 3.9),(2, 2.7),(3, 1.6),(4, 0.7)] Reset indices for large cities: [(1, 8.4),(2, 3.9),(3, 2.7)]
Ниже показано изображение, отображающее результаты выполнения кода в среде PyCharm.
3. С изменением формы
В таких операциях, как конкатенация, изменение формы или выравнивание, нам может потребоваться индекс сброса NumPy массива в Python.
import numpy as np scores = np.array([[90, 85, 88], [78, 92, 80], [84, 76, 91]]) flattened_scores = scores.flatten() reset_index_scores = flattened_scores[:] print("Original 2D scores array with indices:") for i, row in enumerate(scores): for j, score in enumerate(row): print(f"Student {i}, Subject {j}: {score}") print("Flattened array with reset indices:", list(enumerate(reset_index_scores)))
Выход:
Original 2D scores array with indices: Student 0, Subject 0: 90 Student 0, Subject 1: 85 Student 0, Subject 2: 88 Student 1, Subject 0: 78 Student 1, Subject 1: 92 Student 1, Subject 2: 80 Student 2, Subject 0: 84 Student 2, Subject 1: 76 Student 2, Subject 2: 91 Flattened array with reset indices: [(0, 90),(1, 85),(2, 88),(3, 78),(4, 92),(5, 80),(6, 84),(7, 76),(8, 91)]
На снимке экрана ниже показан результат, полученный при запуске кода в редакторе PyCharm.