Структурированный массив Numpy

RedDeveloper
01.04.2023 10:56
Структурированный массив Numpy

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

Структурированный массив Numpy

Что произойдет, если мы превратим список с несколькими типами данных в массив numpy?

Как вы можете видеть, все они превратятся в строки.

 https://numpy.org/doc/stable/user/basics.rec.html
https://numpy.org/doc/stable/user/basics.rec.html
 https://numpy.org/doc/stable/user/basics.rec.html
https://numpy.org/doc/stable/user/basics.rec.html

Если вы посмотрите официальную документацию numpy, то увидите, что структурированные массивы - это имитация struct языка C. Поэтому его можно понимать как массив структур с множеством данных.

Если вы посмотрите официальную документацию numpy то увидите что структурированные â

Когда у вас есть список внутри структуры, вам нужно явно указать его размер (думайте об этом как о способе предварительно определить его размер в памяти), например, так

Чем это отличается от dtype = object?

Когда у вас есть список внутри структуры вам нужно явно указать его размер (думайте об â

Если вы попытаетесь создать массив numpy подобным образом, вы увидите предупреждение в результате, что вам нужно указать dtype как object, как показано здесь

Если вы попытаетесь создать массив numpy подобным образом вы увидите предупреждение в â

Мне стало интересно, что произойдет, если я укажу dtype = object, поэтому я поискал и нашел следующий ответ

 https://stackoverflow.com/questions/29877508/what-does-dtype-object-mean-while-creating-a-numpy-array
https://stackoverflow.com/questions/29877508/what-does-dtype-object-mean-while-creating-a-numpy-array

В конце концов, использование объекта dtype не сильно отличается от того, как Python управлял списками в прошлом. Это наводит меня на мысль, что в итоге вы получаете Pyobject и не получаете преимуществ numpy.

Чтобы проверить это, я решил выполнить простое упражнение по адресации

  • when dtype = object,
Чтобы проверить это я решил выполнить простое упражнение по адресации â
  • dtype = user_numpy_dtype (структурированный массив numpy)
Чтобы проверить это я решил выполнить простое упражнение по адресации â

В зависимости от того, как один и тот же тип списка превращается в массив numpy, начальный адрес элемента отличается.

Здесь я добавил значение в определенный список внутри данных, чтобы посмотреть, не изменится ли при этом значение адреса, вот так

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

Если оно не меняется мы знаем что у нас есть значение адреса а если меняется то мы â
  • when dtype = object,
Если оно не меняется мы знаем что у нас есть значение адреса а если меняется то мы â
  • dtype = user_numpy_dtype (структурированный массив numpy)
Если оно не меняется мы знаем что у нас есть значение адреса а если меняется то мы â

В случае объекта dtpye разница в значениях адресов не изменилась, а в случае структурированного массива разница в значениях адресов изменилась. Поэтому мы видим, что структурированный массив является единым указателем на данные cdtype.

Другой способ увидеть это заключается в том, что когда дело доходит до операций, dtype=object выполняет операции Python, а структурированный массив выполняет операции ctype.

Другой способ увидеть это заключается в том что когда дело доходит до операций â

Для dtype=object мы видим, что операция * является операцией итератора, которая применяется к списку python.

Для dtype=object мы видим что операция * является операцией итератора которая â

С другой стороны, для структурированного массива операция * применяется к ctype для его векторизации.

Преимущества

В нашем проекте мы получили следующие преимущества

  • Улучшение читаемости
    Как видно из примера выше, в случае структурированного массива, который определяет поле, код более читабелен, поскольку вы можете получить доступ к нужным данным через поле.
  • Мы можем использовать параллельные операции (векторизация)
    - Используя операции типа np.where, мы можем получить индекс данных в определенном поле, удовлетворяющем определенным условиям (без необходимости в операторе for)
    - Мы можем получить доступ к массиву внутри структуры и применить к нему параллельные операции.
  • Вы получаете преимущества numpy (по сравнению с dtype = object)
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?

20.08.2023 18:21

Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией

20.08.2023 17:46

В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox

19.08.2023 18:39

Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest

19.08.2023 17:22

В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!

Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️

18.08.2023 20:33

Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL

14.08.2023 14:49

Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.