Python — создание разреженного матричного представления из 10000 случайных значений

У меня есть домашнее задание о полетах в аэропорту, где сначала мне нужно создать представление разреженной матрицы (i, j и значения) для массива 1000x1000 из 10000 случайных чисел со следующими критериями:

  • i и j должны быть между 0-999, так как это строки и столбцы массива
  • значения должны быть между 1,0-5,0
  • я не должен быть равен j
  • i и j должны присутствовать только один раз

i — это аэропорт отправления, j — аэропорт прибытия, а значения — это часы поездки из i в j.

Затем мне нужно найти рейсы туда и обратно для аэропорта А с максимальным количеством остановок от 2 до 8 на основе приведенных выше критериев. Например:

  • A, D, F, G, A — легальный рейс туда и обратно с 4 остановками.
  • A, D, F, D, A не является законной поездкой туда и обратно, поскольку D посещается дважды.

ПРИМЕЧАНИЕ: проблема должна быть решена исключительно с помощью встроенных библиотек Python. Никакие внешние библиотеки, такие как scipy и numpy, не принимаются.

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

Я предполагаю, что i и j не являются фактическими представлениями iloc и j разреженной матрицы, а скорее их значениями? я не знаю.

В настоящее время у меня нет рабочего кода, кроме примера реализации туда и обратно. Хотя вызовет ошибку, если список пуст:

dNext = {
    0: [],
    1: [4, 2, 0],
    2: [1, 4],
    3: [0],
    4: [3, 1]
}

def findRoundTrips(trip, n, trips):
    if (trip[0] == trip[-1]) and (1 < len(trip) <= n + 1):
        trips.append(trip.copy())
        return
    for x in dNext[trip[-1]]:
        if ((x not in trip[1:]) and (len(trip) < n)) or (x == trip[0]):
            trip.append(x)
            findRoundTrips(trip, n, trips)
            trip.pop()

Я не могу сказать, в чем ваш вопрос. Я понимаю домашнее задание, но не имею четкого представления о том, с чем вам нужна помощь.

Paymahn Moghadasian 07.04.2019 15:02

да извините за это. Я пытаюсь создать представление разреженной матрицы, но я не знаю, как это сделать без создания 2D-массива, так как это будет пустой тратой времени. Как запустить цикл от 0 до 10000 и инициализировать тройку разреженных матриц (iloc, j и значения) на основе приведенных выше критериев?

Neoptolemos Kyriakou 07.04.2019 15:59
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
230
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вот как я бы построил разреженную матрицу:

from collections import defaultdict
import random

max_location = 1000
min_value = 1.0
max_value = 5.0

sparse_matrix = defaultdict(list)

num_entries = 10000
for _ in range(num_entries):
    source = random.randint(0, max_location)
    dest = random.randint(0, max_location)
    value = random.uniform(min_value, max_value)

    sparse_matrix[source].append((dest, value))

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

Обратите внимание, я не проверял, что я использую randint и uniform совершенно правильно, если вы используете это, вам следует просмотреть документацию этих функций, чтобы узнать, есть ли в этом решении какие-либо ошибки, связанные с ошибками.

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

Neoptolemos Kyriakou 07.04.2019 18:23

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

Neoptolemos Kyriakou 07.04.2019 18:39

Хм? Я не уверен, что понимаю. Изменение max_location с 1000 на 999 решает проблему? Если нет, как вы думаете, вы можете попробовать объяснить, что происходит не так еще раз? Кроме того, если вы найдете ответ полезным, не забудьте проголосовать. Если это решает проблему, отметьте это как решение.

Paymahn Moghadasian 07.04.2019 23:20

Ответ был действительно очень полезным, и в этом нет ничего плохого. Извините за мой английский не мой родной язык. Я пытаюсь сказать, что когда вы сохраняете значения назначения в словаре, будут дубликаты, поскольку нет проверки, находится ли место назначения уже в sparse_matrix[source]. Но я думаю, это легко решить. Еще раз спасибо, чувак.

Neoptolemos Kyriakou 08.04.2019 00:46

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