簡體   English   中英

將閾值函數有效地應用於SciPy稀疏csr_matrix

[英]Efficiently applying a threshold function to SciPy sparse csr_matrix

我有1列和x行的SciPy csr_matrix(在這種情況下為向量)。 我需要將浮點值轉換為離散類標簽-1、0和1。這應該使用閾值函數完成,該函數將浮點值映射到這3個類標簽之一。

除了遍歷通過scipy.sparse向量(或矩陣)進行迭代中所述的元素之外,別無其他方法嗎? 我希望有一些優雅的方法可以在所有元素上映射(thresholdfunc())。

請注意,盡管它的類型為csr_matrix,但實際上並不是稀疏的,因為它只是涉及稀疏矩陣的另一個函數的返回。

如果有數組,則可以使用np.where函數根據某些條件進行np.where化。 例如:

>>> import numpy as np
>>> x = np.arange(10)
>>> np.where(x < 5, 0, 1)
array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1])

語法為np.where(BOOLEAN_ARRAY, VALUE_IF_TRUE, VALUE_IF_FALSE) 您可以將兩個where語句鏈接在一起以具有多個條件:

>>> np.where(x < 3, -1, np.where(x > 6, 0, 1))
array([-1, -1, -1,  1,  1,  1,  1,  0,  0,  0])

要將其應用於CSR或CSC稀疏矩陣中的數據,可以使用.data屬性,該屬性使您可以訪問包含稀疏矩陣中所有非零條目的內部數組。 例如:

>>> from scipy import sparse
>>> mat = sparse.csr_matrix(x.reshape(10, 1))
>>> mat.data = np.where(mat.data < 3, -1, np.where(mat.data > 6, 0, 1))
>>> mat.toarray()
array([[ 0],
       [-1],
       [-1],
       [ 1],
       [ 1],
       [ 1],
       [ 1],
       [ 0],
       [ 0],
       [ 0]])

暫無
暫無

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

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