我有一個很大的稀疏矩陣。我想對該稀疏矩陣中的所有元素採取log4
。我嘗試使用numpy.log()
,但它不適用於矩陣。以稀疏矩陣取對數函數的有效方法
我也可以一行一行地取對數。然後我用一個新的粉碎舊行。
# Assume A is a sparse matrix (Linked List Format) with float values as data
# It is only for one row
import numpy as np
c = np.log(A.getrow(0))/numpy.log(4)
A[0, :] = c
這並不像我預料的那麼快。有沒有更快的方法來做到這一點?
沒有人提出這個解決方案,因爲它在數學上不正確。 'log(x)'可能與'log(x + 1)'非常不同! (例如:'log(0.000001)= -6','log(0.0000001 + 1 = 0 and a bit')。 – 2012-03-23 02:02:37
對於不合適的問題抱歉,我沒有提及所有的數據都是正數並且大於1。是TF(term frequency)矩陣的值,我認爲沒有問題 – Thorn 2012-03-23 10:29:55
這裏絕對沒有理由在這裏添加3(或任何東西),因爲'A.data'中的條目都不爲0。你確實想要添加一個常量的方法,使用一個更小的方法!添加'1e-16'將會有同樣的效果,即不會使用'log(0)',但引入的錯誤更少:使用[適當的標識](http://en.wikipedia.org/wiki/List_of_logarithmic_identities#Summation.2Fsubtraction),它是'log(x + eps)= log(x)+ log(1 + eps/a)',其中引入的錯誤是如果「eps/a」幾乎爲0,則爲0附近0 – Dougal 2012-03-23 14:37:34