好吧,在尝试回答this question时,我遇到了非常奇怪的事情。
matrix = np.zeros(10000)
matrix[np.random.choice(10000, 100)] = np.random.rand(100)
matrix = matrix.reshape(10, 1000)
from scipy.sparse import lil_matrix
l = lil_matrix(matrix.T)
l.rows
Out: array([[], [], [], ..., [], [], []], dtype=object)
好,所以我想知道哪些行有数据,所以我尝试了:
np.any(l.rows)
Out: [8]
。 。 。 什么?
out = np.any(l.rows)
type(out)
Out: list
这是一个列表。里面有8个。好像。 。 。随机。发生了什么事?
玩转之后,似乎返回了数组中第一个object
而不是[]
。
np.random.seed(9)
matrix = np.zeros(10000)
matrix[np.random.choice(10000, 100)] = np.random.rand(100)
matrix = matrix.reshape(10, 1000)
from scipy.sparse import lil_matrix
l = lil_matrix(matrix.T)
l.rows
Out: array([[], [], [5], ..., [], [], []], dtype=object)
np.any(l.rows)
Out: [5]
但是考虑到np.any
仅应输出布尔值的boolean
或np.array
,这是一个非常奇怪的结果。有人知道为什么会这样吗?
答案 0 :(得分:0)
我找到了。显然,自2014年以来它一直在Easy Fix列表中,但是自上周以来终于有someone working on it。
应该认为我不是尝试这种方法的第一个假人。
此外,这种情况下的正确用法是:
l[l.rows.astype(bool)]
Out:
<97x10 sparse matrix of type '<class 'numpy.float64'>'
with 100 stored elements in LInked List format>