Рубрики
Без рубрики

Как использовать назначение среза в Numpy?

[Супер простой пример] Практический проект науки о данных и пошаговое объяснение.

Автор оригинала: Chris.

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

Основы

Скажем, вы установили датчик температуры в вашем саду, чтобы измерить данные о температуре в течение многих недель. Каждое воскресенье вы удалите датчик температуры из сада и возьмите его в свой дом, чтобы оцифровать значения датчика. Теперь вы понимаете, что значения воскресного датчика неисправно неисправно, потому что они частично измеряли температуру в вашем доме, а не на внешнем месте.

В этом мини-проекте мини-кода вы хотите «очистить» данные, заменив каждое значение воскресного датчика со средним значением датчика последних семи дней. Но прежде чем мы погрузимся в код, давайте рассмотрим самые важные концепции, которые вам нужны как основное понимание.

В предыдущих главах вы уже узнали о нарезях и нарезании нарезки в Python. Функция назначения кусочки Numpy аналогична: вы указываете значения, которые необходимо заменить на левой стороне уравнения и значения, которые заменили их на правую сторону уравнения. Вот пример:

import numpy as np


a = np.array([4] * 16)
print(a)
# [4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4]

a[1::] = [16] * 15
print(a)
# [ 4 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16]

Снаппин кода создает массив, содержащий 16 раз, значение 4. Затем мы используем назначение среза для замены 15 значений последовательности трейлинга со значением 16. Напомним, что обозначение A [START: STOP: Step] выбирает последовательность, начиная с индекса «Пуск», заканчивая индекс «Стоп» (Exclusive), и учитывая только каждый элемент «шаг» – Eth Sequence. Таким образом, нотация [1::] заменяет все элементы последовательности, но первое.

import numpy as np


a = np.array([4] * 16)

a[1:8:2] = 16
print(a)
# [ 4 16  4 16  4 16  4 16  4  4  4  4  4  4  4  4]

В этом примере показано, как использовать назначение среза со всеми указанными параметрами. Интересный поворот заключается в том, что мы указываем только одно значение «16» для замены выбранных элементов. Вы уже знаете название этой функции? Правильно, вещание – это название игры! Правая сторона уравнения автоматически преобразуется в Numpy Array. Форма этого массива равна левому массиву.

Прежде чем мы рассмотрим, как решить проблему с новым онлайн-лайнером, позвольте мне быстро объяснить свойство формы Numpy Armays. Каждый массив имеет атрибут связанного формы (кортеж). I-й Значение кортежей определяет количество элементов I-й ось. Следовательно, количество ценностей кортежных корпусов является размерность массива Numpy. Прочитайте следующие примеры о формах разных массивов:

import numpy as np


a = np.array([1, 2, 3])
print(a)
"""
[1 2 3]
"""
print(a.shape)
# (3,)

b = np.array([[1, 2, 3],
              [4, 5, 6]])
print(b)
"""
[[1 2 3]
 [4 5 6]]
"""
print(b.shape)
# (2, 3)

c = np.array([[[1, 2, 3], [4, 5, 6]],
              [[7, 8, 9], [10, 11, 12]]])
print(c)
"""
[[[ 1  2  3]
  [ 4  5  6]]

 [[ 7  8  9]
  [10 11 12]]]
"""
print(c.shape)
# (2, 2, 3)

Мы создаем три массива A, B и C. Массив A одномерный, поэтому фигурный кортеж имеет только один элемент. Массив B двухмерный, поэтому кортеж формы имеет два элемента. Наконец, массив C является трехмерным, поэтому кортеж формы имеет три элемента.

Это все, что вам нужно знать, чтобы решить следующую проблему:

Код

Учитывая массив температурных значений, замените каждое седьмое значение температуры в среднем за последние семь дней.

## Dependencies
import numpy as np

## Sensor data (M, T, W, T, F, Sa, Su)
tmp = np.array([1, 2, 3, 4, 3, 4, 4,
                5, 3, 3, 4, 3, 4, 6,
                6, 5, 5, 5, 4, 5, 5])


## One-liner
tmp[6::7] = np.average(tmp.reshape((-1,7)), axis=1)


## Result
print(tmp)

Возьмите предположение: какая вывод этого кода фрагмент?

Результат

Во-первых, головоломка создает матрицу данных «TMP» с одномерной последовательностью значений датчиков. В каждой строке мы определяем все семь ценностей датчиков в течение семи дней недели (понедельник, вторник, среда, четверг, пятница, суббота и воскресенье).

Во-вторых, мы используем задание нарезки для замены всех воскресных ценностей этого массива. Как воскресенье – это седьмой день недели, выражение «TMP [6:: 7]» выбирает соответствующие воскресные значения, начиная с седьмого элемента в последовательности (снова: значением воскресного датчика).

В-третьих, мы изменим одномерное массив датчика в двумерный массив с семью колоннами. Это облегчает нам возможность рассчитать еженедельно среднее значение температуры для замены воскресных данных. Обратите внимание, что то значение кортежного формы фигуры -1 (в «TMP.Reshape ((- 1,7))») означает, что количество строк (ось 0) должно быть выбрано автоматически. В нашем случае это приводит к следующему массиву после изменения:

print(tmp.reshape((-1,7)))
"""
[[1 2 3 4 3 4 4]
 [5 3 3 4 3 4 6]
 [6 5 5 5 4 5 5]]
"""

Это один ряд в неделю и один столбец в будний день.

Теперь мы рассчитаем 7-дневную среднюю среднюю, рухнув каждую строку в одно среднее значение, используя функцию NP.average () с аргументом оси: означает, что вторая ось рухнут в одно среднее значение. Это результат правой стороны уравнения:

print(np.average(tmp.reshape((-1,7)), axis=1))
# [3. 4. 5.]

После замены всех значений воскресного датчика мы получаем следующий конечный результат одноклассника:

# [1 2 3 4 3 4 3 5 3
3 4 3 4 4 6 5 5 5 4 5 5]

Куда пойти отсюда?

Вы любите науку данные? Но вы пытаетесь получить все вместе и разрабатывать хорошую интуицию о Numpy Library?

Чтобы помочь вам улучшение Ваше кодовое понимание скорости в Numpy, я соавторю соавторю новую Numpy Book на основе обучения на основе головоломки. Обучение на основе головоломки – это новый, очень практичный подход к изучению кода, основанный на моем опыте преподавания более 60 000 амбициозных кодеров Python в Интернете.

Получите свой «Coffe Break Nampy» сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

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

Оригинал: “https://blog.finxter.com/how-to-use-slice-assignment-in-numpy/”