我有一個非常大的稀疏csc_matrixx
。我想對它做elementwise exp()。基本上我想得到的結果與我在numpy.exp(x.toarray())
中得到的結果相同。但我不能這樣做(我的記憶不會允許我將稀疏矩陣轉換爲數組)。有什麼出路嗎?提前致謝!元智慧exp()的scipy稀疏矩陣
回答
如果你沒有內存容納x.toarray()
,你沒有內存來保存你要求的輸出。輸出不會稀疏;事實上,除非你的輸入中有負無窮大,輸出可能不會有單一的0
它可能會是更好的計算EXP(X)-1,這是因爲
一樣簡單x.expm1()
是的,你說得對。但是,我怎麼能只爲非零值呢? –
那是什麼?稀疏矩陣包含所有碰巧將零映射爲零的numpy函數?有一個我不會期望的功能! –
是的,'scipy/sparse/data.py'有一個代碼塊,用於將#func(0)= 0的numpy一元ufuncs添加到_data_matrix.'中。關鍵是能夠訪問'.data'屬性,並使用'_with_data'方法創建一個新的矩陣。我也沒有意識到這一點。 – hpaulj
如果您只想在非網絡上執行某些操作:data
屬性至少在某些表示中可寫,包括csr
和csc
。某些表示允許重複輸入,因此請確保您採取的是「正常化」形式。
是的,這就是我想到的。無論如何,我會讓我的手髒! –
要更改非零元素,也許這會爲你工作:
x = some big sparse matrix
np.exp(x.data, out=x.data) # ask np.exp() to store results in existing x.data
大概要慢
# above seems more efficient (no new memory alloc).
x.data = np.exp(x.data)
我一直在冥思苦想如何獲得元素之每個非零數組元素的log2()。我最終做了像下面這樣做:
np.log2(x.data, out=x.data)
以下兩種技術看起來像我正在尋找的。我的矩陣很稀疏,但它仍然有很多非零元素。
感謝@DSM here直接更改x.data的想法,我認爲這是對稀疏矩陣的一個非常好的見解。
歸功於@Mike Müller爲使用「出」作爲自己的想法。在同一個線程中,@kmario23指出了一個關於將.data提升爲float(輸入可以是int或者smth)的重要警告,所以它與.exp()或者其他函數兼容,如果我寫的是spath供一般使用。
說明:我剛開始學習稀疏矩陣,所以想知道這是否是一個不好的主意,因爲我沒有看到。如果我在這個薄冰上,請讓我知道。
通常我不會惹私密屬性,但是.data在我看過的各種稀疏矩陣的attributes documentation中顯示得很清楚。
- 1. 轉換SciPy的稀疏矩陣元組
- 2. 切片稀疏(scipy)矩陣
- 3. scipy稀疏矩陣分裂
- 4. scipy稀疏矩陣索引
- 5. Scipy稀疏 - 距離矩陣(Scikit或Scipy)
- 6. 稀疏三元組稀疏矩陣matlab
- 7. numpy.allclose()上SciPy的稀疏矩陣
- 8. SciPy的稀疏矩陣乘法
- 9. scipy稀疏矩陣的對稱化
- 10. SciPy的大型稀疏矩陣
- 11. SciPy的:稀疏矩陣來ndarray
- 12. 蟒蛇(SciPy的):調整稀疏矩陣
- 13. 使用廣播與稀疏scipy矩陣
- 14. 構建大型scipy稀疏矩陣
- 15. 從scipy稀疏矩陣中篩選值
- 16. Scipy:稀疏矩陣條件去除列
- 17. 在列scipy稀疏矩陣迭代
- 18. scipy反轉大型稀疏矩陣
- 19. 修改scipy稀疏矩陣到位
- 20. Scipy稀疏矩陣特殊減法
- 21. scipy相當於numpy.prod()稀疏矩陣
- 22. pyspark:稀疏向量到scipy稀疏矩陣
- 23. 從scipy稀疏矩陣創建稀疏RDD
- 24. 稀疏矩陣
- 25. 矩陣(scipy稀疏) - 矩陣(密集; numpy陣列)乘法效率
- 26. 加載到現有的numpy密集矩陣稀疏scipy矩陣
- 27. 稀疏矩陣和矩陣
- 28. scipy稀疏矩陣:刪除所有元素爲零的行
- 29. 如何使用scipy編輯稀疏矩陣中的單元格?
- 30. Scipy稀疏矩陣分配只使用存儲的元素
如果您無法以高密度格式保存輸入,您將無法保存輸出;由於e^0 = 1,輸出不會稀疏。 – user2357112