Python一些数据处理的方式【主要是numpy &scipy】

1. 根据列表 train_index \ test_index \ val_index ,将这个列表作为下标 传给train_mask \ test_mask \ val_mask ,使得对应列表中元素的内容赋值为True.

从而得到 train \ test \ val 的mask (以train_mask为例,最终得到的是一个numpy的一维向量,若节点是train节点,那么,该节点的对应位置值为True ; 否则为 False)

train_mask = np.zeros(num_nodes, dtype=np.bool)
val_mask = np.zeros(num_nodes, dtype=np.bool)
test_mask = np.zeros(num_nodes, dtype=np.bool)
train_mask[train_index] = True
val_mask[val_index] = True
test_mask[test_index] = True

2. 同1类似,也是将处理的数据的id列表作为下表给处,进行更改赋值:

x = np.array([ [1,2],[11,22],[111,222],[1111,2222],[11111,22222] ])
idx=[4,1,0]
idx_sorted=[0,3,4]
print(x)
print('--'*10)
x[idx]=x[idx_sorted]
print(x)

#输出:
[[    1     2]
 [   11    22]
 [  111   222]
 [ 1111  2222]
 [11111 22222]]
--------------------
[[11111 22222]
 [ 1111  2222]
 [  111   222]
 [ 1111  2222]
 [    1     2]]

3. itertools.groupby()的操作:

朴素的itertools.groupby()含义是将一组字符串,相同的字符聚在一起,并返回这一组相同的字符组成的group含有多少个该字符

import itertools

m = itertools.groupby("anaalabbbjbchcccaaaak")
for k, v in m:
	print(k,':', len(list(v)),end='\t')

#输出为:
a : 1	n : 1	a : 2	l : 1	a : 1	b : 3	j : 1	b : 1	c : 1	h : 1	c : 3	a : 4	k : 1	

==》于是可以通过先将这些字符进行sorted()操作,将相同字符全部聚集到一起,然后就可以统计出整个字符串中有多少种字符以及他们对应的个数

如下述代码:

import itertools

m = itertools.groupby(sorted("anaalabbbjbchcccaaaak"))
for k, v in m:
	print(k,':', len(list(v)),end='\t')

4. 构造出一个coo的稀疏矩阵:

使用scipy.sparse.coo_matrix()函数

该函数有三组参数:

scipy.sparse.coo_matrix( (value_list , (src_list , dst_list) ), shape=邻接矩阵的形状(dim=节点个数×节点个数) , dtype=邻接矩阵中各元素的值)

其中:src_list就是邻接矩阵的源点的列表;dst_list就是目的节点的列表;

value_list就是源点到目的节点的这条边上的对应值(如果就只是朴素的邻接矩阵,那就是graph上两个节点之间有边,那么对应位置处的value=1,否则值为0;但是,若graph是加权的图,那么两个节点有边对应的值就是权重)

使用方式:

import scipy.sparse     #必须得import到sparse

edge = np.array([[0,0],[2,3],[3,5],[6,7],[32,22],[43,37]])  #节点编号从0开始
src_list = edge[:,0]
dst_list = edge[:,1]
num_nodes = 50
# 因为邻接矩阵有边值为1,每边值为0,所以邻接矩阵会有len(edge)个1
# scipy.sparse.coo_matrix( (value_list , (src_list , dst_list) ), shape=邻接矩阵的形状(dim=节点个数×节点个数) , dtype=邻接矩阵中各元素的值)
adjacency = scipy.sparse.coo_matrix((np.ones(len(edge)),
                                   (src_list, dst_list)),
                    shape=(num_nodes, num_nodes), dtype="float32")
print(adjacency)
print( adjacency.toarray() )    #只有 .toarray 之后才可以输出为矩阵形式,不然只是adjacency 就是键值对

由于coo格式比较好构建,如果有存储需要的话,可以选择先将数据构建为COO格式,scipy上有特定的函数可以将其改造为CSC、CSR格式:调用to_csr()、to_csc()、to_dense()把它转换成CSR或稠密矩阵:

ref : https://blog.csdn.net/qq_37344125/article/details/105019357

scipy中稀疏矩阵coo_matrix, csr_matrix 的使用_haoji007的博客-CSDN博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值