NumPy 教程 之 NumPy 位运算 3

简介: NumPy位运算在二进制位级别操作,用于优化及底层数据处理。NumPy提供`bitwise_`前缀函数实现位运算,如按位与(`bitwise_and`)、或(`bitwise_or`)、异或(`bitwise_xor`)、取反(`bitwise_not`/`invert`)以及移位运算。这些运算直接作用于二进制位,例如`bitwise_and`仅当两位皆为1时结果才为1。实例展示了布尔数组及整数的位运算操作,如`np.bitwise_and(True, False)`结果为`False`,以及`np.bitwise_and(13, 17)`结果为`1`。

NumPy 教程 之 NumPy 位运算 3

NumPy 位运算

位运算是一种在二进制数字的位级别上进行操作的一类运算,它们直接操作二进制数字的各个位,而不考虑数字的整体值。

位运算在计算机科学中广泛应用于优化和处理底层数据。

NumPy "bitwise_" 开头的函数是位运算函数。

NumPy 位运算包括以下几个函数:

函数 描述

bitwise_and 按位与,对数组元素执行位与操作
bitwise_or 按位或,对数组元素执行位或操作
bitwise_xor 按位异或
bitwise_not 按位取反
invert 按位取反
left_shift 左移位运算,向左移动二进制表示的位
right_shift 右移位运算,向右移动二进制表示的位

实例

import numpy as np

arr1 = np.array([True, False, True], dtype=bool)
arr2 = np.array([False, True, False], dtype=bool)

result_and = np.bitwise_and(arr1, arr2)
result_or = np.bitwise_or(arr1, arr2)
result_xor = np.bitwise_xor(arr1, arr2)
result_not = np.bitwise_not(arr1)

print("AND:", result_and) # [False, False, False]
print("OR:", result_or) # [True, True, True]
print("XOR:", result_xor) # [True, True, True]
print("NOT:", result_not) # [False, True, False]

按位取反

arr_invert = np.invert(np.array([1, 2], dtype=np.int8))
print("Invert:", arr_invert) # [-2, -3]

左移位运算

arr_left_shift = np.left_shift(5, 2)
print("Left Shift:", arr_left_shift) # 20

右移位运算

arr_right_shift = np.right_shift(10, 1)
print("Right Shift:", arr_right_shift) # 5

也可以使用 "&"、 "~"、 "|" 和 "^" 等操作符进行计算:

与运算(&): 对应位上的两个数字都为1时,结果为1;否则,结果为0。

例如:1010 & 1100 = 1000

或运算(|): 对应位上的两个数字有一个为1时,结果为1;否则,结果为0。

例如:1010 | 1100 = 1110

异或运算(^): 对应位上的两个数字相异时,结果为1;相同时,结果为0。

例如:1010 ^ 1100 = 0110

取反运算(~): 对数字的每个位取反,即0变为1,1变为0。

例如:~1010 = 0101

左移运算(<<): 将数字的所有位向左移动指定的位数,右侧用0填充。

例如:1010 << 2 = 101000

右移运算(>>): 将数字的所有位向右移动指定的位数,左侧根据符号位或补零。

例如:1010 >> 2 = 0010

bitwise_and

bitwise_and() 函数对数组中整数的二进制形式执行位与运算。

实例

import numpy as np

print ('13 和 17 的二进制形式:')
a,b = 13,17
print (bin(a), bin(b))
print ('\n')

print ('13 和 17 的位与:')
print (np.bitwise_and(13, 17))

输出结果为:

13 和 17 的二进制形式:
0b1101 0b10001

13 和 17 的位与:
1
以上实例可以用下表来说明:

1 1 0 1
AND
1 0 0 0 1
运算结果 0 0 0 0 1
位与操作运算规律如下:

A B AND
1 1 1
1 0 0
0 1 0
0 0 0

目录
相关文章
|
Java API 开发工具
得物开放平台接入得物SDK
得物开放平台、得物SDK、得物PUSH、获取订单、虚拟发货
1550 1
 得物开放平台接入得物SDK
|
机器学习/深度学习 存储 并行计算
ModelScope问题之训练报错设置参数如何解决
ModelScope训练是指在ModelScope平台上对机器学习模型进行训练的活动;本合集将介绍ModelScope训练流程、模型优化技巧和训练过程中的常见问题解决方法。
221 0
|
存储 算法 安全
【Freertos基础入门】队列(queue)的使用
【Freertos基础入门】队列(queue)的使用
1285 0
|
SQL 数据采集 关系型数据库
大数据采集和抽取怎么做?这篇文章终于说明白了!
数据是数据中台\数据平台核心中的核心,因此数据汇聚必然是数据中台/平台的入口,本文详细讲述采集模块的方方面面、采集框架的使用选型以及企业真实落地
大数据采集和抽取怎么做?这篇文章终于说明白了!
|
9月前
|
资源调度 JavaScript 前端开发
Pinia 如何在 Vue 3 项目中进行安装和配置?
Pinia 如何在 Vue 3 项目中进行安装和配置?
744 4
|
数据采集 数据管理 数据挖掘
CDGP|数据治理策略揭秘:因企制宜,实现精准管控新高度
数据治理是指通过制定一系列政策、流程和技术手段,对企业数据进行全面、系统、规范的管理。它不仅能够确保数据的准确性、一致性和安全性,还能提升数据的质量和价值,为企业决策提供有力支持。因此,制定数据治理策略的首要任务是明确其核心价值,确保策略能够服务于企业的整体战略目标。
|
机器学习/深度学习 数据采集 算法
【BetterBench博士】2024华为杯C题:数据驱动下磁性元件的磁芯损耗建模 Python代码实现
本文介绍了2024年中国研究生数学建模竞赛C题的详细分析,涵盖数据预处理、特征提取、模型训练及评估等多个方面。通过对磁通密度数据的处理,提取关键特征并应用多种分类算法进行波形分类。此外,还探讨了斯坦麦茨方程及其温度修正模型的应用,分析了温度、励磁波形和磁芯材料对磁芯损耗的影响,并提出了优化磁芯损耗与传输磁能的方法。最后,提供了B站视频教程链接,供进一步学习参考。
1238 7
【BetterBench博士】2024华为杯C题:数据驱动下磁性元件的磁芯损耗建模 Python代码实现
|
存储 算法 UED
深度解析RAG优化之道:从检索到生成全面升级大模型应用性能,探索提升企业服务质量与用户体验的终极秘密
【10月更文挑战第3天】随着大模型技术的进步,人们愈发关注如何针对特定任务优化模型表现,尤其是在需要深厚背景知识的领域。RAG(Retrieval-Augmented Generation)技术因其能检索相关文档以辅助生成内容而备受青睐。本文将通过问答形式深入探讨RAG优化的关键点,并提供具体实现思路及示例代码。
523 2
|
网络协议
使用`http.server`模块搭建简单HTTP服务器
使用`http.server`模块搭建简单HTTP服务器
|
数据处理 Apache 流计算
实时计算引擎 Flink:从入门到深入理解
本篇详细介绍了Apache Flink实时计算引擎的基本概念和核心功能。从入门到深入,逐步介绍了Flink的数据源与接收、数据转换与计算、窗口操作以及状态管理等方面的内容,并附带代码示例进行实际操作演示。通过阅读本文,读者可以建立起对Flink实时计算引擎的全面理解,为实际项目中的实时数据处理提供了有力的指导和实践基础。
5368 2