Быстрый доступ к матрице по ключу строки и столбца

у меня такая матрица

id = (123, 979, 234)

 matrix: 

    123  979  234
123  0   30    45
979  30   0    60
234  15   45    0

Моя проблема в том, что я хочу получить доступ к матрице быстро и легко. Что-то вроде этого:

матрица[идентификатор][идентификатор]

пример:

печать (матрица [123] [979])

выход 30

Пока я использую список, включающий список. Так что я могу получить доступ к данным, зная положение. Это не очень удобно, потому что я не знаю позицию, я знаю только id. Сейчас я использую функцию, которая дает мне правильный номер. Это очень медленно, и мне это нужно для расчета с большим количеством итераций.

У кого-нибудь есть идея решить это быстрым способом?

Функция для расчета матрицы на данный момент приведена ниже, но это всего лишь ноль или 30 * 60 секунд. Я хочу создать новую матрицу с индивидуальным временем, но перед ее кодированием я хочу выяснить, каким образом я могу хранить данные, чтобы иметь быстрый и легкий доступ.

def get_matrix(permutation):

criteria = [django_model1.objects.filter(id=id).get().django_model2.format for id in permutation]

# and to speed up: an ugly combination of 2 list comprehensions and a lambda function. 
return [[(lambda c1, c2: timedelta(seconds = 0 ) if c1==c2 else timedelta(seconds = 30*60 )) (c1,c2) for c2 in criteria] for c1 in criteria ]

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

sammywemmy 14.12.2020 02:13

эта правка помогает?

theother 14.12.2020 02:15

конечно. так что, если это массив numpy или фрейм данных pandas? Вы можете поделиться кодом для создания «матрицы»?

sammywemmy 14.12.2020 02:16

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

theother 14.12.2020 02:18

готово... Надеюсь, это не слишком запутанно

theother 14.12.2020 02:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
152
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использование pandas:

data = [[0, 30, 45], [30, 0, 60], [15, 45, 0]]
ids = [123, 979, 234]
df = pd.DataFrame(data, columns = ids, index = ids)

data можно построить разными способами: зависит от того, как вы строите свою матрицу. Обратитесь к документации для получения дополнительной информации.

Теперь обратитесь по id:

>>> df[979][123]
30

Примечание. Порядок идентификаторов обратный, поскольку pandas принимает идентификатор столбца в качестве первого индекса.

это так фантастично!!! Я получил ускорение с 1:43 мин до 9 сек. просто получая доступ к таким данным вместо вызова функции.

theother 15.12.2020 02:09

Другие вопросы по теме