gpt4 book ai didi

python - 在稀疏矩阵中找到非零 block 并进行处理

转载 作者:太空宇宙 更新时间:2023-11-04 05:53:11 24 4
gpt4 key购买 nike

我有一个稀疏矩阵,它的大部分值都是零。在这个矩阵中,一些连续的行和列的组是非零的。每个非零 block 都分配有一个 ID。同一 ID 最多只能分配给两个组。示例(看 5 和 8):

         [8 8 0 0 0 0 0 0 0 0 0]
[0 5 5 5 0 0 0 5 5 0 0]
[0 0 5 5 0 3 0 5 0 0 8]
[0 0 0 5 0 3 0 0 0 0 8]
[0 0 0 2 4 4 0 0 0 0 8]
[0 0 0 2 4 4 0 0 0 0 8]

现在的问题是,如何将具有相同 ID 的组更改为不同的组[新 ID 可以是任何内容]?输入矩阵是 numpy 矩阵。这是上述矩阵的一个可能输出(“5”-id 组之一更改为 50,“8”-Id 组更改为 66):

         [66  66  0  0  0 0 0 0 0 0 0]
[0 50 50 50 0 0 0 5 5 0 0]
[0 0 50 50 0 3 0 5 0 0 8]
[0 0 0 50 0 3 0 0 0 0 8]
[0 0 0 2 4 4 0 0 0 0 8]
[0 0 0 2 4 4 0 0 0 0 8]

最佳答案

首先,我会尝试通过扫描数组中的非零术语来构建字典。

scipy.sparse 使用 dok 格式(键字典)执行此操作,其中键是包含 i,j 的元组坐标,值为数组值。但是出于这个问题的目的,我将值(5,8 等)设为键,字典值将是一个坐标元组列表。 collections.defaultdict 会很快做到这一点。

例如:

dd = {8:[(0,0),(0,1),(2,11),(3,11),...], 5:[(1,1),(1,2),...]}

然后我会扫描字典,并使用某种距离标准,分解列表

dd = {66:[(0,0),(0,1)], 8:[(2,11),(3,11)...], 55:[...], 5:[...]...}

我认为没有办法避免多次遍历数组。像这样的字典是一种收集和重组数据的灵活方式。一旦更好地理解了问题,就可以直接使用数组。但第一步是获得工作代码。效率是后来的。

关于python - 在稀疏矩阵中找到非零 block 并进行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29134820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com