繁体   English   中英

从Python中的数组向量化压缩的稀疏矩阵

[英]Vectorize compressed sparse matrix from array in Python

我正在尝试将图论方法应用于图像处理问题。 我想从包含要绘制的点的数组生成邻接矩阵。 我想生成数组中点的完整图形。 如果阵列中需要绘制N个点,则需要一个NxN矩阵。 权重应该是点之间的距离,所以这是我的代码:

''' vertexarray is an array where the points that are to be 
    included in the complete graph are True and all others False.'''

import numpy as np
def array_to_complete_graph(vertexarray):

    vertcoords = np.transpose(np.where(vertexarray == True))

    cg_array = np.eye(len(vertcoords))

    for idx, vals in enumerate(vertcoords):
        x_val_1, y_val_1 = vals
        for jdx, wals in enumerate(vertcoords):
            x_diff = wals[0] - vals[0]
            y_diff = wals[1] - vals[1]
            cg_array[idx,jdx] = np.sqrt(x_diff**2 + y_diff**2)
    return cg_array

当然,这可行,但是我的问题是:可以在不嵌套for循环的情况下生成相同的数组吗?

使用函数scipy.spatial.distance.cdist()

import numpy as np

def array_to_complete_graph(vertexarray):

    vertcoords = np.transpose(np.where(vertexarray == True))

    cg_array = np.eye(len(vertcoords))

    for idx, vals in enumerate(vertcoords):
        x_val_1, y_val_1 = vals
        for jdx, wals in enumerate(vertcoords):
            x_diff = wals[0] - vals[0]
            y_diff = wals[1] - vals[1]
            cg_array[idx,jdx] = np.sqrt(x_diff**2 + y_diff**2)
    return cg_array

arr = np.random.rand(10, 20) > 0.75

from scipy.spatial.distance import cdist
y, x = np.where(arr)
p = np.c_[x, y]
dist = cdist(p, p)
np.allclose(array_to_complete_graph(arr), dist)

暂无
暂无

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

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