Чтобы сбросить индекс массива NumPy в Python после таких операций, как нарезка, использование np.arange или изменение формы с помощью Flatten(), мы можем создать новый массив из измененного. Этот процесс эффективно переиндексирует элементы, начиная с нуля.

Например, после разрезания массива восстановите его с помощью np.array(sliced_array), чтобы сбросить его индексы. Аналогичным образом используйте np.arange для создания последовательных индексов для условно выбранных элементов, а после выравнивания массива воссоздайте его для сброса индексов.

Массивы NumPy в Python представляют собой n-мерные объекты массива, и доступ к каждому элементу массива осуществляется по его позиции или «индексу». Индексация в NumPy начинается с нуля, то есть индекс первого элемента равен 0, второго — 1 и так далее.

Существует три различных сценария сброса индекса массива NumPy в Python. Давайте рассмотрим их один за другим, используя несколько наглядных примеров.

Содержание

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.

С использованием np.arange с условным выбором

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.

С изменением формы

Добавить комментарий