数据类型tensor、list、numpy和DataFrame间相互转换 与 pandas csv文件先写后读

1.1 list 转 numpy

ndarray = np.array(list)

 

1.2 numpy 转 list

list = ndarray.tolist()

 

2.1 list 转 torch.Tensor

tensor=torch.Tensor(list)

 

2.2 torch.Tensor 转 list

先转numpy,后转list

list = tensor.numpy().tolist()

 

3.1 torch.Tensor 转 numpy

ndarray = tensor.numpy()

*gpu上的tensor不能直接转为numpy

ndarray = tensor.cpu().numpy()

 

3.2 numpy 转 torch.Tensor

tensor = torch.from_numpy(ndarray) 




4.1 numpy 转 DataFrame
df = pandas.DataFrame(numpy)


4.2 DataFrame 转 numpy

ndarray = np.array(df) 也可以 ndarray = df.to_numpy()



5.1 pyg dataset[0]/data 转 networkx

from torch_geometric.utils import to_networkx
g_nx = to_networkx(data, to_undirected=True)

5.2 networkx 转 pyg data

G = nx.Graph()
edgelist = [(0,1),(0,2),(0,3),(1,3)]
G.add_edges_from(edgelist)
x = torch.eye(G.number_of_nodes(), dtype=torch.float) # x是节点特征矩阵,这里设为单位矩阵。
adj = nx.to_scipy_sparse_matrix(G).tocoo() # adj是图G的邻接矩阵的稀疏表示,左边节点对代表一条边,右边是边的值,adj是对称矩阵。

# row是adj中非零元素所在的行索引
row = torch.from_numpy(adj.row.astype(np.int64)).to(torch.long)

# col是adj中非零元素所在的列索引。
col = torch.from_numpy(adj.col.astype(np.int64)).to(torch.long)

# 将行和列进行拼接,shape变为[2, num_edges], 包含两个列表,第一个是row, 第二个是col
edge_index = torch.stack([row, col], dim=0)
y = torch.tensor([partition[i] for i in range(G.number_of_nodes())
train_mask = torch.zeros(y.size(0), dtype=torch.bool)
data = Data(x=x, edge_index=edge_index, y=y, train_mask=train_mask)

写文件函数to_csv详细:

简单版本:df.to_csv("文件名", header=0, index=0, sep=",")

DataFrame.to_csv(path_or_buf=None, sep=', ', na_rep='', float_format=None, columns=None, header=True, index=True,
                 index_label=None, mode='w', encoding=None, compression=None, quoting=None, quotechar='"',
                 line_terminator='\n', chunksize=None, tupleize_cols=None, date_format=None, doublequote=True,
                 escapechar=None, decimal='.')

参数解释:

path_or_buf : 文件路径,如果没有指定则将会直接返回字符串的 json
sep : 输出文件的字段分隔符,默认为 “,”
na_rep : 用于替换空数据的字符串,默认为''
float_format : 设置浮点数的格式(几位小数点)
columns : 要写的列
header : 是否保存列名,默认为 True ,保存
index : 是否保存索引,默认为 True ,保存
index_label : 索引的列标签名

先写文件然后读出自己写的内容,代码如下:

a = [[1,2,3,5,4],[6,7,8,9,10]]
a = torch.Tensor(a)
df = pd.DataFrame(a.cpu().numpy())

// 最后文件内容中索引号,即行号要去掉,列号/列名应该保留
df.to_csv("test_out.csv", index=0) 

df = pd.read_csv("test_out.csv")

End...

你可能感兴趣的:(Python总结,numpy,python,机器学习)