Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы воспользоваться этим преимуществом?
Что произойдет, если мы превратим список с несколькими типами данных в массив numpy?
Как вы можете видеть, все они превратятся в строки.
Если вы посмотрите официальную документацию numpy, то увидите, что структурированные массивы - это имитация struct языка C. Поэтому его можно понимать как массив структур с множеством данных.
Когда у вас есть список внутри структуры, вам нужно явно указать его размер (думайте об этом как о способе предварительно определить его размер в памяти), например, так
Если вы попытаетесь создать массив numpy подобным образом, вы увидите предупреждение в результате, что вам нужно указать dtype как object, как показано здесь
Мне стало интересно, что произойдет, если я укажу dtype = object, поэтому я поискал и нашел следующий ответ
В конце концов, использование объекта dtype не сильно отличается от того, как Python управлял списками в прошлом. Это наводит меня на мысль, что в итоге вы получаете Pyobject и не получаете преимуществ numpy.
Чтобы проверить это, я решил выполнить простое упражнение по адресации
В зависимости от того, как один и тот же тип списка превращается в массив numpy, начальный адрес элемента отличается.
Здесь я добавил значение в определенный список внутри данных, чтобы посмотреть, не изменится ли при этом значение адреса, вот так
Если оно не меняется, мы знаем, что у нас есть значение адреса, а если меняется, то мы знаем, что оно указывает на начальный адрес данных типа ctype (одиночный указатель).
В случае объекта dtpye разница в значениях адресов не изменилась, а в случае структурированного массива разница в значениях адресов изменилась. Поэтому мы видим, что структурированный массив является единым указателем на данные cdtype.
Другой способ увидеть это заключается в том, что когда дело доходит до операций, dtype=object выполняет операции Python, а структурированный массив выполняет операции ctype.
Для dtype=object мы видим, что операция * является операцией итератора, которая применяется к списку python.
С другой стороны, для структурированного массива операция * применяется к ctype для его векторизации.
В нашем проекте мы получили следующие преимущества
20.08.2023 18:21
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".
20.08.2023 17:46
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
19.08.2023 18:39
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.
19.08.2023 17:22
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!
18.08.2023 20:33
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.
14.08.2023 14:49
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.