图数据集稀疏矩阵转稠密格式todense()属性报错解决方案
报错核心原因
todense()是scipy稀疏矩阵对象的内置方法,不属于numpy.ndarray类。触发该报错的原因是当前读取到的features本身已经是numpy稠密数组,并非scipy稀疏矩阵,因此不存在该方法。
可落地的转换方案
可以根据对象类型选择对应处理方式,也可以写兼容逻辑同时适配稀疏、稠密两种输入:
- 针对scipy稀疏矩阵格式的对象(比如Cora数据集中的邻接矩阵
adj默认是该格式):
优先使用toarray()方法直接转成numpy稠密数组,比todense()更方便,不会返回numpy.matrix类型的特殊对象:
如果习惯用adj_dense = adj.toarray()todense(),可以在后面接.A属性转成普通ndarray:adj_dense = adj.todense().A - 针对已经是numpy.ndarray格式的对象(比如当前报错对应的
features):
不需要做任何转换,直接使用即可。 - 通用兼容写法(不用提前判断格式,直接对特征、邻接矩阵统一处理):
import scipy.sparse as sp def sparse_to_dense(x): if sp.issparse(x): return x.toarray() return x # 统一转换所有矩阵 features = sparse_to_dense(features) adj = sparse_to_dense(adj) labels = sparse_to_dense(labels)
补充提示:Cora的特征矩阵是高维词袋稀疏特征,转稠密后内存占用会明显升高,如果你的图神经网络实现支持稀疏格式输入,保留稀疏格式运算速度会更快。
内容的提问来源于stack exchange,提问作者playerJX1
相关产品推荐
相关产品推荐

