У меня есть домашнее задание о полетах в аэропорту, где сначала мне нужно создать представление разреженной матрицы (i, j и значения) для массива 1000x1000 из 10000 случайных чисел со следующими критериями:
i — это аэропорт отправления, j — аэропорт прибытия, а значения — это часы поездки из i в j.
Затем мне нужно найти рейсы туда и обратно для аэропорта А с максимальным количеством остановок от 2 до 8 на основе приведенных выше критериев. Например:
ПРИМЕЧАНИЕ: проблема должна быть решена исключительно с помощью встроенных библиотек 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()
да извините за это. Я пытаюсь создать представление разреженной матрицы, но я не знаю, как это сделать без создания 2D-массива, так как это будет пустой тратой времени. Как запустить цикл от 0 до 10000 и инициализировать тройку разреженных матриц (iloc, j и значения) на основе приведенных выше критериев?
Вот как я бы построил разреженную матрицу:
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. Это то, что я сейчас безуспешно пытаюсь выяснить.
ну, мое вышеприведенное предположение неверно. Только пункты назначения будут дублироваться.
Хм? Я не уверен, что понимаю. Изменение max_location
с 1000
на 999
решает проблему? Если нет, как вы думаете, вы можете попробовать объяснить, что происходит не так еще раз? Кроме того, если вы найдете ответ полезным, не забудьте проголосовать. Если это решает проблему, отметьте это как решение.
Ответ был действительно очень полезным, и в этом нет ничего плохого. Извините за мой английский не мой родной язык. Я пытаюсь сказать, что когда вы сохраняете значения назначения в словаре, будут дубликаты, поскольку нет проверки, находится ли место назначения уже в sparse_matrix[source]. Но я думаю, это легко решить. Еще раз спасибо, чувак.
Я не могу сказать, в чем ваш вопрос. Я понимаю домашнее задание, но не имею четкого представления о том, с чем вам нужна помощь.