Python lil_矩阵对象的Numpy数组-为空?

Python lil_矩阵对象的Numpy数组-为空?,python,numpy,scipy,Python,Numpy,Scipy,我想问一下,是否有一种干净的方法来检查包含其他数组的numpy对象数组中的空元素。 在此之前,我通常会检查内部对象的大小,如果x是一个numpy数组,则效果良好: [True if np.size(x) == 0 else False for x in metrics] 但是,当x是一个scipy稀疏lil_矩阵数组,其中size返回0时,这不起作用 有没有什么好方法可以检查度量[x]=[]?那么如果它没有被设置为任何值呢 编辑:举个例子 import numpy as np from sci

我想问一下,是否有一种干净的方法来检查包含其他数组的numpy对象数组中的空元素。 在此之前,我通常会检查内部对象的大小,如果
x
是一个numpy数组,则效果良好:

[True if np.size(x) == 0 else False for x in metrics]
但是,当
x
是一个scipy稀疏lil_矩阵数组,其中size返回
0
时,这不起作用

有没有什么好方法可以检查度量[x]=[]?那么如果它没有被设置为任何值呢

编辑:举个例子

import numpy as np
from scipy.sparse import lil_matrix
metrics = np.empty(5, dtype=object)
metrics[2] = np.zeros((3,3))
metrics[3] = lil_matrix(np.zeros((3,3),dtype=bool))
我想知道0,1,4是空的,2,3不是空的

如果我运行上述命令,我会得到:

In [6]: [True if np.size(x) == 0 else False for x in metrics]
Out[6]: [False, False, False, True, False]

这不是我想要的。我想要
[True,True,False,False,True]

我不知道它是否能与lil\u矩阵一起工作,但您可以使用类似于any()函数的函数来处理numpy数组:

a = np.array([])
b = np.array([1,2])
c = np.array([b,b,a,b])
d = [not m.any() for m in b]
这将为您提供一个正确/错误列表。那么你需要像这样的想法:

all(d)

事实上我找到了解决办法。显然是空的对象数组将元素设置为“无”。 那我就可以做了

In [11]: [True if x is None else False for x in metrics]
Out[11]: [True, True, False, False, True]

为了得到我的结果

lil_矩阵是稀疏矩阵表示,非零的值将设置为零。您可以检查lil_矩阵的行/列是否全部为零。我不想检查稀疏矩阵是否为零。我试图检查numpy数组位置
x
中是否有任何矩阵。您的方法应该正好做到这一点。如果lil_矩阵的一行在int中只有零,
np.size
将返回零。这不是你想要的吗?你能给出一个数组的例子来检查吗?
x
是否总是一个
lil
矩阵?您正在检查非零值的形状或数量吗?很抱歉造成混淆,请看我在编辑中的示例。您可以在列表中添加“否”。我已经完成了回答
AttributeError:'NoneType'对象没有属性'any'
any对空数组元素不起作用。看看我的解决方案,对任何人来说,它都是行不通的。但是对于空元素(如果它像a),它是有效的。如果空元素与空numpy数组不同,那么当然。我想我现在明白了空元素的含义。如果您使用np.empy函数,您将看到保存的值可能不同于0。在这种情况下,我建议不要使用它,通常我不会测试
空数组的值,但是对于这个对象,dtype
是None
有效。但要注意未来numpy版本的变化。如果你不测试它们,你怎么能删除它们?我这样做基本上是为了从np.array中删除所有空元素。使用普通的数据类型(int、float等)
np.empty
只保留分配内存块中的字节。因此,价值观几乎可以是任何东西。使用
dtype=object
,条目是指向对象的指针,显然默认值是指向唯一的
None
对象。通常,当人们用
empty
初始化数组时,他们打算自己设置所有值。为什么使用对象数组而不是列表?我想知道你是否将
np.empty
与空列表
[]
混为一谈。他们没有关系。