繁体   English   中英

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

[英]Python - Create sparse matrix representation from 10000 random values

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

  • i 和 j 必须在 0-999 之间,因为是数组的行和列
  • 值必须在 1.0-5.0 之间
  • i 不能等于 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))

这样做是将稀疏矩阵定义为字典,其中字典的键是旅行的起点。 键的值定义了您可以飞到的任何地方以及飞到那里需要多长时间作为元组列表。

请注意,我没有检查我是否完全正确地使用了randintuniform ,如果你使用它,你应该查看这些函数的文档,以确定这个解决方案中是否有任何一对一的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM