Python 从非方数据集生成拉普拉斯矩阵

Python 从非方数据集生成拉普拉斯矩阵,python,Python,我有一个数据集,如下所示,其中第一列和第二列表示从到的节点连接: fromNode toNode 0 1 0 2 0 31 0 73 1 3 1 56 2 10 ... 我想从这个数据集中生成拉普拉斯矩阵。我使用下面的代码来实现这一点,但它会抱怨,因为数据集本身不是平方矩阵。是否有接受此类数据集并生成矩阵的函数 from numpy import genfromtxt from scipy.sparse import csgraph import csv G

我有一个数据集,如下所示,其中第一列和第二列表示从到的节点连接:

fromNode    toNode
0   1
0   2
0   31
0   73
1   3
1   56
2   10
...
我想从这个数据集中生成拉普拉斯矩阵。我使用下面的代码来实现这一点,但它会抱怨,因为数据集本身不是平方矩阵。是否有接受此类数据集并生成矩阵的函数

from numpy import genfromtxt
from scipy.sparse import csgraph
import csv

G = genfromtxt('./data.csv', delimiter='\t').astype(int)
dataset = csgraph.laplacian(G, normed=False)

将数据处理为正确的格式,而不是找到将删除数据的函数

伪数据
f
模拟文件对象。对Python3.6使用
io.StringIO

data = '''0   1
0   2
0   31
0   73
1   3
1   56
2   10'''
f = io.BytesIO(data)
读取每行数据,并以
(node1,node1)
的形式将其处理为边列表

edges = []
for line in f:
    line = line.strip()
    (node1, node2) = map(int, line.split())
    edges.append((node1,node2))
找到最高的节点编号,根据最高的节点编号创建一个方形numpy ndarray。你需要知道你的节点编号-它是以零为基础的吗

N = max(x for edge in edges for x in edge)
G = np.zeros((N+1,N+1), dtype = np.int64)
迭代边并将边权重指定给图形

for row, column in edges:
    G[row,column] = 1

这里有一个利用的解决方案


当然,这两种方法都假定所有边权重相等



请参阅scipy文档中的。我无法尝试此图表以查看它是否有效,我收到了一个导入错误,原因是
csgraph
-可能需要更新。

看起来您需要将节点/边缘数据集处理为所需的格式-从文档中,而不是
z.t[0]
您可以使用
z[:,0]
,但更好的是:您可以将其解包为
行,columns=z.T
我想。啊,是的。。。
rows,columns
赋值是事后才想到的,我原来在下一行有
z.T
切片。真有趣,你怎么会错过这样的事情。thnx。
z = np.genfromtxt(f, dtype = np.int64)
n = z.max() + 1
g = np.zeros((n,n), dtype = np.int64)
rows, columns = z.T
g[rows, columns] = 1