我是Python的新手,所以如果这是一个基本的问题,请提前原谅我,但是我已经到处寻找了,还没有找到令人满意的答案。
我正在尝试使用NumPy和SciPy执行以下操作:
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是对称的,那么添加转置就没有必要了。
任何对这两种方法的见解都将非常受欢迎。
发布于 2011-07-22 05:09:37
除了执行类似G = G / G的操作之外,您还可以对G.data进行操作。
因此,在您的情况下,执行以下任一操作:
G.data = np.ones(G.nnz)或
G.data[G.data != 0] = 1会照你说的做。这更加灵活,因为它允许您预先形成其他类型的过滤器(例如G.data[G.data > 0.9] = 1或G.data = np.random.random(G.nnz))
第二个选项仅在它们具有非零值时才将这些值设置为1。在某些计算过程中,您将得到“密集”的零值(即它们实际上存储为稀疏数组中的一个值)。(您可以使用G.eliminate_zeros()就地删除这些内容)
https://stackoverflow.com/questions/6782556
复制相似问题