gpt4 book ai didi

python - numpy.where 相当于 csr_matrix python

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:35 24 4
gpt4 key购买 nike

我正在尝试将 numpy.where 与 csr_matrix 一起使用,但它不起作用。我问是否有一些内置函数等效于 numpy.where 用于稀疏矩阵。这是我想在不使用 Forloop.todense()

的情况下做的事情的示例
 import scipy.sparse as spa
import numpy as np
N = 100
A = np.zeros((N,N))

di = np.diag_indices((len(A[:,0])))
A[di] = 2.3
'''
adding some values to non-diagonal terms
for sake of example
'''
for k in range(0,len(A)-1):
for j in range(-1,3,2):
A[k,k+j] = 4.0
A[2,3] =0.1
A[3,3] = 0.1
A[0,4] = 0.2
A[0,2] = 3

'''
creating sparse matrix
'''
A = spa.csc_matrix((N,N))
B = spa.csc_matrix((N,N))

'''
Here I get
TypeError: unsupported operand type(s) for &: 'csc_matrix' and 'csc_matrix'
'''

ind1 = np.where((A>0.0) & (A<=1.0))
B[ind1] = (3.0-B[ind1])**5-6.0*(2.0-B[ind1])**5

最佳答案

如何处理 AB 的底层数组,data 数组

In [36]: ind2=np.where((A.data>0.0)&(A.data<=1.0))

In [37]: A.indices[ind2]
Out[37]: array([2, 3, 0])

In [38]: A.indptr[ind2]
Out[38]: array([28, 31, 37])

In [39]: A.data[ind2]
Out[39]: array([ 0.1, 0.1, 0.2])

In [41]: B.data[ind2]=(3.0-B.data[ind2])**5-6.0*(2.0-B.data[ind2])**5

In [42]: B.data[ind2]
Out[42]: array([ 56.54555, 56.54555, 58.7296 ])

要看ind2在dense版本中对应的是什么,把数组转成coo

In [53]: Ac=A.tocoo()

In [54]: (Ac.row[ind2], Ac.col[ind2])
Out[54]: (array([2, 3, 0]), array([3, 3, 4]))

其中,作为引用,密集数组上的where是:

In [57]: np.where((A.A>0.0) & (A.A<=1.0))
Out[57]: (array([0, 2, 3]), array([4, 3, 3]))

一个重要的警告 - 使用 A.data 意味着您排除了密集数组的所有零条目。

关于python - numpy.where 相当于 csr_matrix python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24973762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com