Python lil_矩阵对象的Numpy数组-为空?
我想问一下,是否有一种干净的方法来检查包含其他数组的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
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
与空列表[]
混为一谈。他们没有关系。