这篇文章主要讲解了“scipy稀疏数组coo_array如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“scipy稀疏数组coo_array如何实现”吧!
coo_array
coo也被称为ijv,是一种三元组格式,对于矩阵中第i ii行第j jj列的值v vv,将其存储为( i , j , v ) (i,j,v)(i,j,v)这样的三元组,即为coo_array的原理。
例如
import numpy as npfrom scipy.sparse import coo_arrayrow = np.array([0, 3, 1, 0])col = np.array([0, 3, 1, 2])data = np.array([4, 5, 7, 9])coo_array((data, (row, col)), shape=(4, 4)).toarray()print(coo.toarray())
其输出结果为
但需要注意一点,若行数组和列数组所对应的矩阵坐标发生了重复,那么重复位置处对应的值会累加,
row = np.array([0, 0, 1, 3, 1, 0, 0])col = np.array([0, 2, 1, 3, 1, 0, 0])data = np.array([1, 1, 1, 1, 1, 1, 1])coo = coo_array((data, (row, col)), shape=(4, 4))print(coo.toarray())
结果为
初始化方案
coo_array(D) D是一个稀疏数组或2 × D 2\times D2×D数组
coo_array(S) S是另一种稀疏数组
coo_array((M, N),dtype='d') 创建一个shape为( M , N ) (M, N)(M,N)的空数组,dtype为数据类型
coo_array((data, (i,j))) (i, j)是坐标数组,data是数据数组,设新矩阵为a,则a[i[k], j[k]] = data[k]
前三种比较容易理解,下面验证一下第四种
>>> from scipy.sparse import coo_array>>> import numpy as np>>> data = np.random.rand(3)>>> x = y = np.arange(3).astype(int)>>> coo = coo_array((data,(x,y)))>>> coo.toarray()array([[0.28050236, 0. , 0. ], [0. , 0.59568482, 0. ], [0. , 0. , 0.84392724]])
内置方法
稀疏数组在计算上并不便捷,所以coo_array中内置了下列函数,可以高效地完成计算。
函数 | expm1 , log1p , sqrt , pow , sign |
三角函数 | sin , tan , arcsin , arctan , deg2rad , rad2deg |
双曲函数 | sinh , tanh , arcsinh , arctanh |
索引 | getcol , getrow , nonzero , argmax , argmin , max , min |
舍入 | ceil , floor , trunc |
变换 | conj , conjugate , getH |
统计 | count_nonzero , getnnz , mean , sum |
矩阵 | diagonal , trace |
获取属性 | get_shape , getformat |
计算比较 | multiply , dot , maximum , minimum |
转换 | asformat , asfptype , astype , toarray , todense |
转换 | tobsr , tocoo , tocsc , tocsr , todia , todok , tolil |
更改维度 | set_shape , reshape , resize , transpose |
排序 | sort_indices , sorted_indices |
移除元素 | eliminate_zeros , prune , sum_duplicates |
其他 | copy , check_format , getmaxprint , rint , setdiag |
感谢各位的阅读,以上就是“scipy稀疏数组coo_array如何实现”的内容了,经过本文的学习后,相信大家对scipy稀疏数组coo_array如何实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!