Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 06.06.2020
Сообщений: 7
1

Структура данных map

30.11.2020, 15:17. Просмотров 1137. Ответов 5
Метки нет (Все метки)

Добрый день.
Решил поэкспериментировать с питоном пока у меня есть свободное время...
Однако у меня есть некоторая трудность. В С++ существуют двоичные деревья set и map. В своей текущей работе я моделирую трехмерное пространство с помощью map, то есть три ключа - это координаты по пространству, а значение - это класс. Это позволяет как проводить быстрый поиск, так и вставку и удаление, что позволяет значительно ускорить процесс работы с данными, когда их несколько миллиардов. Плюс map позволяет легко производить распараллеливание процесса обработки данных. Но это всё приходиться делать вручную.

Мне нравиться питон, за его простоту и я пытался найти некоторую аналогию в питоне и в его математических пакетах, чтобы не прописывать каждый чих на C++, однако несколько часов гугления не дали результата. Я нашел словари и принципы работы с ними, но не нашел математические пакеты для них, вроде numpy. Тот же numpy не поддерживает работу с деревьями, он работает только со статическими матрицами, как я понял из документации.

Вопрос в общем следующий: существует ли математический пакет в питоне, который мне позволит работать с большим количеством данных в деревьях (словарях) и при этом будет обладать такой же функциональностью и быстротой как numpy или scipy?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2020, 15:17
Ответы с готовыми решениями:

Map структура с ключом
Здравствуйте есть такой вопрос я решил использовать map для работы под ключом Я у меня есть ...

Структура в качестве ключа для map
Доброго времени суток. Имеется простая структура struct coordinateSet { public: ...

Структура(ошибка в лабе(структура в структуре b чтение данных через txt)
Даны две структуры содержащие "афоризмы" и "пословицы", которые объединяются в другой структуре,...

Структура как ключ map, возможно ли как-то реализовать operator []
Возможно бред, но всё же. Реализовать сам ключ не сложно, вот код: class cKey { public: ...

5
567 / 421 / 175
Регистрация: 10.12.2016
Сообщений: 1,151
30.11.2020, 23:15 2
прямой аналог map - dict
но питоновский будет медленный
вариант - сделать питоновский модуль dll/so через ctypes например
https://python-scripts.com/ext... -libraries

Добавлено через 32 минуты
тут чел исследовал методы подключения С++ к питону
https://habr.com/ru/post/466499/
0
Эксперт Python
4294 / 3169 / 1031
Регистрация: 28.10.2013
Сообщений: 8,180
01.12.2020, 00:05 3
Цитата Сообщение от Victor_2020 Посмотреть сообщение
В С++ существуют двоичные деревья set и map
Это не двоичные деревья. Это структуры, которые их используют как способ организации данных.
Питоновские dict и set основаны не на двоичных деревьях, а на hash table. Доступ к данным в hash table - константа, то есть быстрее чем в бинарных деревьях, где он O(log N).
Но эти питоновские структуры неоптимальны по памяти в сравнении с сишными и это вполне естественно.
Цитата Сообщение от vic5710 Посмотреть сообщение
но питоновский будет медленный
Это неверно. Медленнее будет не структура, а интерпретатор.

Добавлено через 2 минуты
Цитата Сообщение от Victor_2020 Посмотреть сообщение
математический пакет в питоне
Вся быстрая математика основана на массивах. numpy это сишные массивы. Можешь просто засунуть в dict numpy массив.

Добавлено через 3 минуты
Python
1
2
3
4
5
6
7
8
9
10
>>> import numpy as np
>>> arr = np.array([1,2,3])
>>> d= {"x":arr}
>>> d['x']
array([1, 2, 3])
>>> d['x'].T
array([1, 2, 3])
>>> d['x'].sum()
6
>>>
0
0 / 0 / 0
Регистрация: 06.06.2020
Сообщений: 7
01.12.2020, 04:54  [ТС] 4
Цитата Сообщение от Garry Galler Посмотреть сообщение
Можешь просто засунуть в dict numpy массив.
Преобразовать в массив? Тогда пропадет вся прелесть скорости удаления и добавления точек. А так как модель предполагает изменение размеров тела, образование полостей и т.д., то преобразовывать словарь к массиву каждый раз при изменении набора координат? Да и массивы предполагают при работе с прямоугольными областями, при произвольном наборе точек массивы не применимы...
То есть сразу оговорюсь, что я использую неравномерную сетку с непрямоугольными областями. И конечно-элементный подход я не использую так как в моем случае он очень много времени и памяти жрет на большом количестве данных.

Добавлено через 12 минут
Цитата Сообщение от vic5710 Посмотреть сообщение
вариант - сделать питоновский модуль dll/so через ctypes
Сделать модуль и подключить к питону - это я всегда успею. Меня интересует есть ли готовое решение на питоне для моей задачи, не хочу изобретать велосипед.
0
Эксперт Python
4294 / 3169 / 1031
Регистрация: 28.10.2013
Сообщений: 8,180
01.12.2020, 11:01 5
Цитата Сообщение от Victor_2020 Посмотреть сообщение
есть ли готовое решение на питоне
Приведи хотя бы пример своих данных и то, как ты с ним работаешь из с++. А то пока речь про каких-то сферических коней в вакууме.

Добавлено через 14 минут
Цитата Сообщение от Victor_2020 Посмотреть сообщение
есть три ключа - это координаты по пространству, а значение - это класс.
В Python классы (экземпляры) точно также можно хранить в dict. И доступ будет за константу.
Но для миллиарда экземпляров у тебя должно быть дофига ОЗУ.
Реализаций деревянных структур также хватает. Вот только зачем они тебе пока непонятно.
0
Эксперт Python
4383 / 1822 / 337
Регистрация: 17.03.2012
Сообщений: 9,488
Записей в блоге: 5
01.12.2020, 15:48 6
Victor_2020, вообще да, непонятно, что вы хотите сделать.
Чудес не бывает, у дерева и у хеш-таблицы (т. е. питоновского словаря) свои сильные и слабые стороны. Т. е. непонятно, чего именно вам не хватает в питоне. Опишите, может, подскажем.

И кстати да, я видел стороннюю библиотеку, которая позволяет работать со словарями в numpy-стиле, но это всего лишь сахар для работы с обычными словарями и масивами, волшебный пендель к перфомансу не даст.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2020, 15:48

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Выбор типа дерева (структура данных) для хранения данных в БД
Всем хай! Сходу к делу! Столкнулся с такой задачей. Есть сущность "Автомобиль", описываемый...

std::map и структуры данных
Подскажите хорошие статьи или может главы из книг где описано как построен std::map, на основе...

Контейнеры данных. STL map
Имеется набор заранее известных констант типа int. Вставлять/удалять элементы не нужно. Требуется...

Создание и использование карт изображений на сайте тег <map> </map>
Собственно, вопрос заключается - в том, что бы получить значения coords для многоугольника. Как и...

Обращение к элементам vector, который находится в map, находящийся в map
Всем добрый день! Имеется такой контейнер. Как обращаться к элементам вектора и как пушбэчить...

Поместить вектора в map и реализовать перегрузку вывода для map
Всем привет! Нужна помощь в написании программы. У меня есть вот такая прога и мне нужно каким-то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.