首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >元组中的稀疏数组

元组中的稀疏数组
EN

Stack Overflow用户
提问于 2013-11-21 16:21:07
回答 2查看 1.5K关注 0票数 4

我在网上找了一本西西稀疏矩阵的指南,结果失败了。如果有人愿意与我分享任何消息来源,我会很高兴的,但现在我要提出疑问:

我有一组元组。我希望将元组数组更改为稀疏矩阵,其中元组出现在主对角线和对角线上,就像下面的示例所示。做这件事的花哨(有效)方法是什么?

代码语言:javascript
复制
import numpy as np
A=np.asarray([[1,2],[3,4],[5,6],[7,8]])
B=np.zeros((A.shape[0],A.shape[0]+1))
for i in range(A.shape[0]):
    B[i,i]=A[i,0]
    B[i,i+1]=A[i,1]
print B

产出如下:

代码语言:javascript
复制
[[ 1.  2.  0.  0.  0.]
 [ 0.  3.  4.  0.  0.]
 [ 0.  0.  5.  6.  0.]
 [ 0.  0.  0.  7.  8.]]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-21 16:39:03

您可以以CSR矩阵的形式快速构建这些矩阵:

代码语言:javascript
复制
>>> A = np.asarray([[1,2],[3,4],[5,6],[7,8]])
>>> rows = len(A)
>>> cols = rows + 1
>>> data = A.flatten() # we want a copy
>>> indptr = np.arange(0, len(data)+1, 2) # 2 non-zero entries per row
>>> indices = np.repeat(np.arange(cols), [1] + [2] * (cols-2) + [1])
>>> import scipy.sparse as sps
>>> a_sps = sps.csr_matrix((data, indices, indptr), shape=(rows, cols))
>>> a_sps.A
array([[1, 2, 0, 0, 0],
       [0, 3, 4, 0, 0],
       [0, 0, 5, 6, 0],
       [0, 0, 0, 7, 8]])
票数 4
EN

Stack Overflow用户

发布于 2013-11-21 16:26:56

试试 from scipy

代码语言:javascript
复制
import numpy as np
import scipy.sparse

A = np.asarray([[1,2],[3,4],[5,6],[7,8]])
B = scipy.sparse.diags([A[:,0], A[:,1]], [0, 1], [4, 5])

当我print B.todense(),它给了我

代码语言:javascript
复制
[[ 1.  2.  0.  0.  0.]
 [ 0.  3.  4.  0.  0.]
 [ 0.  0.  5.  6.  0.]
 [ 0.  0.  0.  7.  8.]]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20126372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档