Python - создает разреженное матричное представление из 10000 случайных значений - PullRequest
0 голосов
/ 07 апреля 2019

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

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

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

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

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

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

Я попытался запустить цикл для 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()

1 Ответ

0 голосов
/ 07 апреля 2019

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

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 совершенно правильно, если вы используете это, вы должны взглянуть на документацию этих функций, чтобы выяснить, есть ли какие-либоединичные ошибки в этом решении.

...