Структурированный массив 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)
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?

05.05.2023 14:00

Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.

Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом

05.05.2023 11:59

Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря своим методам, они делают код очень простым для понимания и читабельным.

JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы

05.05.2023 11:57

Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний, то, не теряя времени, практикуйте наш бесплатный онлайн тест 1100+ JavaScript MCQs и развивайте свои навыки и знания.

Массив зависимостей в React
Массив зависимостей в React

05.05.2023 09:44

Все о массиве Dependency и его связи с useEffect.