簡體   English   中英

如何在scipy.sparse.csr_matrix類型的矩陣上進行元素操作?

[英]How to operate elementwise on a matrix of type scipy.sparse.csr_matrix?

如果你想計算矩陣(elementise)的每個條目的正弦,那么在numpy中

a = numpy.arange(0,27,3).reshape(3,3)
numpy.sin(a)

將完成工作! 如果你想要電源讓我們說每個條目2

a**2

會做的。

但是,如果你有一個稀疏矩陣,事情似乎更難。 至少我還沒有找到一種方法來做到這一點,除了遍歷lil_matrix格式的每個條目並對其進行操作。

在SO上發現了這個問題,並嘗試調整這個答案,但我沒有成功。

目標是以元素方式計算CSR格式的scipy.sparse矩陣的平方根(或1/2的冪)。

你會建議什么?

以下技巧適用於將零映射到零的任何操作,並且僅適用於那些操作,因為它僅觸及非零元素。 即,它適用於sinsqrt但不適用於cos

X是一些CSR矩陣......

>>> from scipy.sparse import csr_matrix
>>> X = csr_matrix(np.arange(10).reshape(2, 5), dtype=np.float)
>>> X.A
array([[ 0.,  1.,  2.,  3.,  4.],
       [ 5.,  6.,  7.,  8.,  9.]])

非零元素的值是X.data

>>> X.data
array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])

您可以就地更新:

>>> X.data[:] = np.sqrt(X.data)
>>> X.A
array([[ 0.        ,  1.        ,  1.41421356,  1.73205081,  2.        ],
       [ 2.23606798,  2.44948974,  2.64575131,  2.82842712,  3.        ]])

更新在SciPy的最新版本中,您可以執行X.sqrt() ,其中X是稀疏矩陣,以獲取具有X中元素的平方根的新副本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM