Python - 从 10000 个随机值创建稀疏矩阵表示



我有一个关于机场航班的家庭作业,首先我必须从 10000 个随机数中为一个 1000x1000 数组创建一个稀疏矩阵(i、j 和值)的表示,具有以下条件:

  • i 和 j 必须介于 0-999 之间,因为数组的行和列
  • 值必须介于 1.0-5.0 之间
  • 我不能等于 j
  • i 和 j 必须只出现一次

i 是出发机场,j是到达机场,值是从 i 到 j 的行程小时数。

然后,我必须根据上述标准找到最多停靠 2 到 8 个站点的机场 A 的往返行程。例如:

  • 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()

以下是我构建稀疏矩阵的方法:

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完全正确,如果您使用它,您应该查看这些函数的文档,以了解此解决方案中是否存在任何逐一错误。

最新更新