我使用Numpy并将此数组用于示例:
error:
[[-1. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
[ 0. -1. 0. 0. 0. 0. 0. 0. 1. 0.]
[ 1. -1. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. -1. 0. 0. 0. 0. 0. 0. 1. 0.]
[-1. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
[-1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
[-1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
[-1. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[-1. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
[-1. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 1. -1. 0. 0. 1. 0. 0. 0. 0. 0.]
[-1. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 1. -1. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 1. -1. 0. 0. 0. 0. 0. 0. 0. 0.]
[-1. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
现在我想计算内部数组中只包含零的数量,但是没有编写循环函数。
他们有任何可能的解决方案吗?
我知道我可以使用,一个in range(len(error))
次迭代的循环,然后一行一行地检查np.sum(abs(error[i]))>0
但是我想要一个更好的解决方案。
答案 0 :(得分:1)
这将完成这项工作:
a=np.array([[0.,1.,0.],[-1.,0.,0.],[0.,0.,0.]])
np.sum(np.abs(a).sum(axis=1)<1e-5)
结果为1,确实只有一行所有元素都为0.另外,我将1e-5
作为错误术语包含在内(因为你的数字是浮点而不是整数)。
此外,如果您的矩阵a
实际上只包含刚写为浮点数的整数(如您的示例所示),您还可以执行以下操作:
a=np.array([[0.,1.,0.],[-1.,0.,0.],[0.,0.,0.]])
a=a.astype(int)
len(a)-np.count_nonzero(np.abs(a).sum(axis=1))
结果是1。
答案 1 :(得分:0)
您可以尝试使用np.bincount(数据)。
这是一个例子:
m = np.array([[0,0,1,2,3,4,0,6]]
data = np.apply_along_axis(lambda x: np.bincount(x,minlength=2), axis=1, arr=m)
然后只需选择您想要的一个数据,在您的情况下,数据[0]
答案 2 :(得分:0)
以下方法为您提供了所有非零的行索引:
In [25]: arr
Out[25]:
array([[ 0, 0, 0, 0, -1, 0, 0, 0, 1, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, -1, 0, 0, 0, -1, 0, 0, 0, 0],
[ 0, 0, 0, -1, 1, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 1, 0, -1, 0, 0, 0, 0],
[-1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, -1, 0, 0, -1, 0, 0, -1],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, -1, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
[-1, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
然后使用np.where
组合布尔掩码和np.sum
:
In [26]: np.where((arr != 0).sum(axis=1) == 0)
Out[26]: (array([ 1, 2, 3, 4, 5, 8, 11, 12, 14, 17]),)
答案 3 :(得分:0)
如果您正在寻找all 0.
而不是sum==0.
,这就是您所需要的:
a = [[1., 0., 1.], [0., 0., 0.], [-1., 0., 1.]]
result = len([item for item in a if set(item)==set([0.])])