np.any从对象数组而不是布尔值返回一个对象?

时间:2018-09-11 07:05:37

标签: python numpy scipy sparse-matrix

好吧,在尝试回答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仅应输出布尔值的booleannp.array,这是一个非常奇怪的结果。有人知道为什么会这样吗?

1 个答案:

答案 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>