广告位联系
返回顶部
分享到

Numpy判断数组是否全0的三种方法

python 来源:互联网 作者:佚名 发布时间:2024-12-09 22:56:04 人浏览
摘要

1numpy.any() numpy.any()函数用于检查一个numpy数字是否存在任何一个非0元素,因此将numpy.any()的结果取反即得numpy数组是否全0的结果。例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import numpy as np print(Using numpy.

1 numpy.any()

numpy.any()函数用于检查一个numpy数字是否存在任何一个非0元素,因此将numpy.any()的结果取反即得“numpy数组是否全0”的结果。例如:      

1

2

3

4

5

6

7

8

9

10

11

12

13

14

import numpy as np

 

print('Using numpy.any()...')

a_1D = np.zeros(5)

print('Is a_1D all zeros?: ', not(np.any(a_1D)))

print('Is a_1D all zeros?: ', ~(np.any(a_1D)))

a_1D[2] = -1

print('Is a_1D all zeros?: ', not(np.any(a_1D)))

 

a_2D = np.zeros((2,3))

print(a_2D)

print('Is a_2D all zeros?: ', not(np.any(a_2D)))

a_2D[1,2] = 0.1

print('Is a_2D all zeros?: ', not(np.any(a_2D)))

输出结果:

Using numpy.any()...
Is a_1D all zeros?:  True
Is a_1D all zeros?:  True
Is a_1D all zeros?:  False
[[0. 0. 0.]
[0. 0. 0.]]
Is a_2D all zeros?:  True
Is a_2D all zeros?:  False

注意,python中逻辑取反可以用"~"也可以用"not",但是不能用“!”(“!=”是比较运算符--comparison operator, 只能用于比如说"b!=c"这样)。另外,"~"和"not"也是有区别的,参见以下第4节。

2 numpy.count_nonzero()

numpy.count_nonzero()用于对数组的0元素个数进行计数,因此也可以用来执行是否全0的判断。用法如下:

1

2

3

4

5

6

7

print('Using numpy.nonzero()...')

a = np.array([1,2,3,0,0,1])

print('Number of zeros in a = ',np.count_nonzero(a))

print('Is a all zeros?: ', np.count_nonzero(a)==0)

a[:] = 0 # Force a to all-zeros array

print('Is a all zeros?: ', np.count_nonzero(a)==0)

print('Is a all zeros?: ', not np.count_nonzero(a))

Using numpy.nonzero()...
Number of zeros in a =  4
Is a all zeros?:  False
Is a all zeros?:  True
Is a all zeros?:  True 

3 numpy.all()  

用numpy.all()也可以实现这一功能。以下例子利用了python内部会自动进行0--False, 1--True的转换。

1

2

3

4

print('')

print('Using numpy.all()...')

a = np.zeros(10)

print('Is a all zeros?: ', np.all(a==0))

Using numpy.all()...
Is a all zeros?:  True 

4. 多维数组可以分axis进行判断

对于多维数组(这正是numpy正真发挥强悍实力的地方)以上函数在缺省情况下是对整个数组进行统一判断,但是也可以通过axis参数指定沿指定轴分别处理。如下例所示:

1

2

3

4

5

6

7

print('')

print('Judge according to the specified axis')

a_2D = np.zeros((2,3))

a_2D[1,2] = 0.1

print(a_2D)

print('Is each col of a_2D all zeros?: ', ~(np.any(a_2D, axis=0)))

print('Is each row of a_2D all zeros?: ', ~(np.any(a_2D, axis=1)))

Judge according to the specified axis
[[0.  0.  0. ]
 [0.  0.  0.1]]
Is each col of a_2D all zeros?:  [ True  True False]
Is each row of a_2D all zeros?:  [ True False]

当指定axis=0时相当于对2维数组按列判断是否全0,指定axis=1时相当于对2维数组按行判断是否全0。当然,这里所说的行和列的概念是从传统的2维数组或者矩阵里继承而来的概念,当考虑更高维数组的时候,行和列这个概念就不再适用了。关于高维数组(也称:Tensor,张量)的axis将另文介绍。

另外,前面提到表示逻辑取反的“~”和“not”是有所不同的。具体来说就是,not只接受一个操作数,因此以上这个例子如果将"~"改为not的话会报错,如下所示:

1

2

print('Is each col of a_2D all zeros?: ', not(np.any(a_2D, axis=0)))

print('Is each row of a_2D all zeros?: ', not(np.any(a_2D, axis=1)))

报错如下: 

而“~”是所谓的Bitwise NOT operator.

如果"~"的输入是一个整数的的话,它会将输入数的所有比特都取反。如果是一个numpy 数组的话,则会对其中每一个数执行按位逻辑取反操作。如果是一个numpy布尔类型(True, False)数组的话,则会对其中每一个布尔数执行逻辑取反操作--以上例子中正是这种用法。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • python随机种子ranrandom seed的使用介绍
    在Python中启用随机种子(random seed)是为了确保你的随机数生成过程是可重复的。通过设置随机种子,你可以保证每次运行代码时生成的随机
  • Numpy判断数组是否全0的三种方法

    Numpy判断数组是否全0的三种方法
    1numpy.any() numpy.any()函数用于检查一个numpy数字是否存在任何一个非0元素,因此将numpy.any()的结果取反即得numpy数组是否全0的结果。例如: 1
  • python实现字符串逆序输出的几种方法
    方法一:使用切片(Slicing) 1 2 3 4 5 6 def reverse_string(s): return s[::-1] s=str(input(请输入字符串:)) reversed_string=reverse_string(s) print(reversed_string) 在
  • python删除目录的三种方法介绍
    一、os.rmdir(path) 删除目录 path,path必须是个空目录,否则抛出OSError异常。 二、os.removedirs(path) 递归地删除目录。要求每一级目录都为空,才
  • Python内置模块UUID的具体使用介绍
    uuid模块是Python标准库的一部分,它提供了一种生成通用唯一识别码(Universally Unique Identifier,简称UUID)的方法,UUID是一种标识符标准,其目的
  • Python中find()的用法小结
    1 2 3 s = Hello Word! a = o print ( 字符o在字符串中的索引为: ,s.find(a)) #输出结果为字符o在字符串中的索引为: 4 1 2 3 4 5 s = Hello Word! a = o print (
  • Python元组超详细介绍(小白篇)
    元组(Tuple)是Python中的一种内置数据类型,用于存储多个有序的元素。与列表不同,元组是不可变的,这意味着一旦创建,元组中的元素就
  • Python中jieba模块使用方法介绍
    在中文自然语言处理(NLP)中,分词是基本而关键的步骤。由于中文没有空格,分词可以帮助我们更好地理解和处理文本。jieba是一个流行的
  • Python中魔法参数 *args 和 **kwargs使用介绍

    Python中魔法参数 *args 和 **kwargs使用介绍
    在Python编程中,函数的灵活性是其强大之处之一。其中,*args 和 **kwargs 是实现函数参数可变性的重要工具。 无论我们是Python初学者还是经验
  • python学习之subprocess模块介绍
    subprocess功能:创建子进程,并连接他的输入、输出和错误管道,获取其返回状态(可以在python代码中执行操作系统级别的命令) 1. subproce
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计