首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在SciPy中,针对csr_matrices的奇特索引

在SciPy中,针对csr_matrices的奇特索引
EN

Stack Overflow用户
提问于 2011-07-22 04:46:42
回答 1查看 736关注 0票数 4

我是Python的新手,所以如果这是一个基本的问题,请提前原谅我,但是我已经到处寻找了,还没有找到令人满意的答案。

我正在尝试使用NumPy和SciPy执行以下操作:

代码语言:javascript
复制
I,J = x[:,0], x[:1]               # x is a two column array of (r,c) pairs
V = ones(len(I))
G = sparse.coo_matrix((V,(I,J)))  # G's dimensions are 1032570x1032570
G = G + transpose(G)
r,c = G.nonzero()
G[r,c] = 1
...
NotImplementedError: Fancy indexing in assignment not supported for csr matrices

基本上,我希望所有非零值在添加转置后都等于1,但我得到了奇特的索引错误消息。

或者,如果我可以证明矩阵G是对称的,那么添加转置就没有必要了。

任何对这两种方法的见解都将非常受欢迎。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-22 05:09:37

除了执行类似G = G / G的操作之外,您还可以对G.data进行操作。

因此,在您的情况下,执行以下任一操作:

代码语言:javascript
复制
G.data  = np.ones(G.nnz)

代码语言:javascript
复制
G.data[G.data != 0] = 1

会照你说的做。这更加灵活,因为它允许您预先形成其他类型的过滤器(例如G.data[G.data > 0.9] = 1G.data = np.random.random(G.nnz))

第二个选项仅在它们具有非零值时才将这些值设置为1。在某些计算过程中,您将得到“密集”的零值(即它们实际上存储为稀疏数组中的一个值)。(您可以使用G.eliminate_zeros()就地删除这些内容)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6782556

复制
相关文章

相似问题

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