You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用nx.from_numpy_array构建图时遇未知numpy数据类型object错误

解决NetworkX from_numpy_array无法识别object数据类型的问题

问题场景

执行以下代码构建有向图时出现报错:

mat_L1 = mat_L1_df.to_numpy()[1:,1:]
L1_G = nx.from_numpy_array(mat_L1, parallel_edges=False, create_using=nx.DiGraph)  

报错信息:

KeyError: 'O'
TypeError: Unknown numpy data type: object

原因是nx.from_numpy_array仅支持数值类型的numpy数组,而你的mat_L1是object类型数组(可能包含字符串、混合类型或非数值数据),导致无法解析。

解决方法

方法1:转换数组为数值类型

如果数组内容本质是数值,只是存储为object类型,直接用astype转换:

# 根据实际数据选择float或int
mat_L1 = mat_L1_df.to_numpy()[1:,1:].astype(float)
# 或者
mat_L1 = mat_L1_df.to_numpy()[1:,1:].astype(int)

注意:若数组包含非数值元素,转换会抛出异常,需先清理数据。

方法2:清理并转换非数值元素

如果数组存在非数值内容(如空字符串、None),先定义转换规则处理后再转数值:

import numpy as np

def convert_to_numeric(x):
    try:
        return float(x)
    except (ValueError, TypeError):
        return 0.0  # 可根据需求替换为其他默认值

# 批量处理数组元素
mat_L1 = np.vectorize(convert_to_numeric)(mat_L1_df.to_numpy()[1:,1:])

方法3:直接从DataFrame构建图(推荐)

绕开numpy数组转换,使用NetworkX提供的from_pandas_adjacency方法直接从DataFrame创建图:

# 截取目标邻接矩阵部分(去掉首行首列)
adjacency_df = mat_L1_df.iloc[1:, 1:]
L1_G = nx.from_pandas_adjacency(adjacency_df, create_using=nx.DiGraph)

该方法会自动处理DataFrame中的数据类型,适配性更强。

内容的提问来源于stack exchange,提问作者user24015087

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:13:20