Numpy错误地将Networkx图转换为数组。

3
我在尝试将一个networkx图形列表转换为Numpy数组时遇到了问题。 当列表中的所有图形都具有相同数量的节点时,似乎Numpy会自动将输入图形转换为数组,并且结果与我的期望不符。
以下是一个简短的复制脚本:
import numpy as np
import networkx as nx

g1 = nx.DiGraph([(1, 2), (2, 3)])
g2 = nx.DiGraph([(1, 2), (2, 3), (3, 4)])
g3 = nx.DiGraph([(1, 2), (2, 1), (1, 3)])

ok_numpy = np.array([g1, g2], dtype=object)
ko_numpy = np.array([g1, g3], dtype=object)

>> ok_numpy = [<networkx.classes.digraph.DiGraph object at ...>, <networkx.classes.digraph.DiGraph object at ...>]
>> ko_numpy = [[1 2 3], [1 2 3]] <-- Objects are not DiGraph() anymore, edges info is lost, dimension is 2 instead of 1

如果有人知道一个解决方案,让 ko_numpy 的行为与 ok_numpy 相同,那就太完美了。

你不能把它留作列表吗?制作数组有什么好处? - hpaulj
1个回答

4

这是numpy的一个bug-feature,详见此答案。目前的解决方案是创建一个空数组并为其分配特定的元素:

ko_numpy2 = np.empty(2, dtype=object)
ko_numpy2[:] = [g1, g3]

不是最理想的,但是可行的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接