当前位置: 首页 > news >正文

Python NumPy(8):NumPy 位运算、NumPy 字符串函数

1 NumPy 位运算

        位运算是一种在二进制数字的位级别上进行操作的一类运算,它们直接操作二进制数字的各个位,而不考虑数字的整体值。NumPy 提供了一系列位运算函数,允许对数组中的元素进行逐位操作,这些操作与 Python 的位运算符类似,但作用于 NumPy 数组,支持矢量化处理,性能更高。

        位运算在计算机科学中广泛应用于优化和处理底层数据。NumPy bitwise_ 开头的函数是位运算函数。NumPy 位运算包括以下几个函数:

操作函数/运算符描述
按位与numpy.bitwise_and(x1, x2)对数组的每个元素执行逐位与操作。
按位或numpy.bitwise_or(x1, x2)对数组的每个元素执行逐位或操作。
按位异或numpy.bitwise_xor(x1, x2)对数组的每个元素执行逐位异或操作。
按位取反numpy.invert(x)对数组的每个元素执行逐位取反(按位非)。
左移numpy.left_shift(x1, x2)将数组的每个元素左移指定的位数。
右移numpy.right_shift(x1, x2)将数组的每个元素右移指定的位数。
import numpy as nparr1 = 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

1.1 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))

        以上实例可以用下表来说明:

1101
AND
10001
运算结果00001

        位与操作运算规律如下:

ABAND
111
100
010
000

1.2 bitwise_or

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

import numpy as npa, b = 13, 17
print('13 和 17 的二进制形式:')
print(bin(a), bin(b))print('13 和 17 的位或:')
print(np.bitwise_or(13, 17))

        以上实例可以用下表来说明:

1101
OR
10001
运算结果11101

        位或操作运算规律如下:

ABOR
111
101
011
000

1.3 invert

        invert() 函数对数组中整数进行位取反运算,即 0 变成 1,1 变成 0。对于有符号整数,取该二进制数的补码,然后 +1。二进制数,最高位为0表示正数,最高位为 1 表示负数。看看 ~1 的计算步骤:

  • 1(这里叫:原码)转二进制 = 00000001
  • 按位取反 = 11111110
  • 发现符号位(即最高位)为1(表示负数),将除符号位之外的其他数字取反 = 10000001
  • 末位加1取其补码 = 10000010
  • 转换回十进制 = -2
表达式二进制值(2 的补数)十进制值
500000000 00000000 00000000 000001015
~511111111 11111111 11111111 11111010-6
import numpy as npprint('13 的位反转,其中 ndarray 的 dtype 是 uint8:')
print(np.invert(np.array([13], dtype=np.uint8)))
print('\n')
# 比较 13 和 242 的二进制表示,我们发现了位的反转print('13 的二进制表示:')
print(np.binary_repr(13, width=8))
print('\n')print('242 的二进制表示:')
print(np.binary_repr(242, width=8))

1.4 left_shift

        left_shift() 函数将数组元素的二进制形式向左移动到指定位置,右侧附加相等数量的 0。

import numpy as npprint('将 10 左移两位:')
print(np.left_shift(10, 2))
print('\n')print('10 的二进制表示:')
print(np.binary_repr(10, width=8))
print('\n')print('40 的二进制表示:')
print(np.binary_repr(40, width=8))
#  '00001010' 中的两位移动到了左边,并在右边添加了两个 0。

1.5 right_shift

        right_shift() 函数将数组元素的二进制形式向右移动到指定位置,左侧附加相等数量的 0。

import numpy as npprint('将 40 右移两位:')
print(np.right_shift(40, 2))
print('\n')print('40 的二进制表示:')
print(np.binary_repr(40, width=8))
print('\n')print('10 的二进制表示:')
print(np.binary_repr(10, width=8))
#  '00001010' 中的两位移动到了右边,并在左边添加了两个 0。

2 NumPy 字符串函数

        以下函数用于对 dtype 为 numpy.string_ 或 numpy.unicode_ 的数组执行向量化字符串操作。 它们基于 Python 内置库中的标准字符串函数。这些函数在字符数组类(numpy.char)中定义。

描述
add()对两个数组的逐个字符串元素进行连接
multiply()返回按元素多重连接后的字符串
center()居中字符串
capitalize()将字符串第一个字母转换为大写
title()将字符串的每个单词的第一个字母转换为大写
lower()数组元素转换为小写
upper()数组元素转换为大写
split()指定分隔符对字符串进行分割,并返回数组列表
splitlines()返回元素中的行列表,以换行符分割
strip()移除元素开头或者结尾处的特定字符
join()通过指定分隔符来连接数组中的元素
replace()使用新字符串替换字符串中的所有子字符串
decode()数组元素依次调用str.decode
encode()数组元素依次调用str.encode

2.1 numpy.char.add()

        numpy.char.add() 函数依次对两个数组的元素进行字符串连接。

import numpy as npprint('连接两个字符串:')
print(np.char.add(['hello'], [' xyz']))
print('\n')print('连接示例:')
print(np.char.add(['hello', 'hi'], [' abc', ' xyz']))

2.2 numpy.char.multiply()

        numpy.char.multiply() 函数执行多重连接。

import numpy as npprint(np.char.multiply('ywz ', 3))

2.3 numpy.char.center()

        numpy.char.center() 函数用于将字符串居中,并使用指定字符在左侧和右侧进行填充。

import numpy as np# np.char.center(str , width,fillchar) :
# str: 字符串,width: 长度,fillchar: 填充字符
print(np.char.center('ywz', 20, fillchar='*'))

2.4 numpy.char.capitalize()

        numpy.char.capitalize() 函数将字符串的第一个字母转换为大写:

import numpy as npprint(np.char.capitalize('ywz'))

2.5 numpy.char.title()

        numpy.char.title() 函数将字符串的每个单词的第一个字母转换为大写:

import numpy as npprint (np.char.title('i like apple'))

2.6 numpy.char.lower()

        numpy.char.lower() 函数对数组的每个元素转换为小写。它对每个元素调用 str.lower。

import numpy as np# 操作数组
print(np.char.lower(['YWZ', 'GOOGLE']))# 操作字符串
print(np.char.lower('YWZ'))

2.7 numpy.char.upper()

        numpy.char.upper() 函数对数组的每个元素转换为大写。它对每个元素调用 str.upper。

import numpy as np# 操作数组
print(np.char.upper(['ywz', 'google']))# 操作字符串
print(np.char.upper('ywz'))

2.8 numpy.char.split()

        numpy.char.split() 通过指定分隔符对字符串进行分割,并返回数组。默认情况下,分隔符为空格。

import numpy as np# 分隔符默认为空格
print(np.char.split('i like apple?'))
# 分隔符为 .
print(np.char.split('blog.csdn.net', sep='.'))

2.9 numpy.char.splitlines()

        numpy.char.splitlines() 函数以换行符作为分隔符来分割字符串,并返回数组。\n,\r,\r\n 都可用作换行符。

import numpy as np# 换行符 \n
print(np.char.splitlines('i\nlike apple?'))

2.10 numpy.char.strip()

        numpy.char.strip() 函数用于移除开头或结尾处的特定字符。

import numpy as np# 移除字符串头尾的 a 字符
print(np.char.strip('ashok aywza', 'a'))# 移除数组元素头尾的 a 字符
print(np.char.strip(['aywza', 'admin', 'java'], 'a'))

2.11 numpy.char.join()

        numpy.char.join() 函数通过指定分隔符来连接数组中的元素或字符串

import numpy as np# 操作字符串
print(np.char.join(':', 'ywz'))# 指定多个分隔符操作数组元素
print(np.char.join([':', '-'], ['ywz', 'google']))

2.12 numpy.char.replace()

        numpy.char.replace() 函数使用新字符串替换字符串中的所有子字符串。

import numpy as npprint(np.char.replace('i like apple', 'pp', 'cc'))

2.13 numpy.char.encode()

        numpy.char.encode() 函数对数组中的每个元素调用 str.encode 函数。 默认编码是 utf-8,可以使用标准 Python 库中的编解码器。

import numpy as npa = np.char.encode('ywz', 'cp500')
print(a)

2.14 numpy.char.decode()

        numpy.char.decode() 函数对编码的元素进行 str.decode() 解码。

import numpy as npa = np.char.encode('ywz', 'cp500')
print(a)
print(np.char.decode(a, 'cp500'))

相关文章:

Python NumPy(8):NumPy 位运算、NumPy 字符串函数

1 NumPy 位运算 位运算是一种在二进制数字的位级别上进行操作的一类运算&#xff0c;它们直接操作二进制数字的各个位&#xff0c;而不考虑数字的整体值。NumPy 提供了一系列位运算函数&#xff0c;允许对数组中的元素进行逐位操作&#xff0c;这些操作与 Python 的位运算符类似…...

日志2025.1.30

日志2025.1.30 1.简略地做了一下交互系统 public class Interactable : MonoBehaviour { private MeshRenderer renderer; private Material defaultMaterial; public Material highlightMaterial; private void Awake() { renderer GetComponentInChildren<Me…...

实战:如何快速让新网站被百度收录?

本文来自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/22.html 要让新网站快速被百度收录&#xff0c;可以采取以下实战策略&#xff1a; 一、网站基础优化 网站结构清晰&#xff1a;确保网站的结构简洁清晰&#xff0c;符合百度的抓取规则。主…...

PhotoShop中JSX编辑器安装

1.使用ExtendScript Tookit CC编辑 1.安装 打开CEP Resource链接&#xff1a; CEP-Resources/ExtendScript-Toolkit at master Adobe-CEP/CEP-Resources (github.com) 将文件clone到本地或者下载到本地 点击AdobeExtendScriptToolKit_4_Ls22.exe安装&#xff0c;根据弹出的…...

01-时间与管理

时间与效率 一丶番茄时钟步骤好处 二丶86400s的财富利用时间的方法每天坚持写下一天计划 自我管理体系计划-行动-评价-回顾 一丶番茄时钟 一个计时器 一份任务清单,任务 步骤 每一个25分钟是一个番茄时钟 将工作时间划分为若干个25分钟的工作单元期间只专注于当前任务,遇到…...

MiniMax-01技术报告解读

刚刚MiniMax发布了MiniMax-01&#xff0c;简单测试了效果&#xff0c;感觉不错。于是又把它的技术报告看了一下。这种报告看多了&#xff0c;就会多一个毛病&#xff0c;越来越觉得自己也能搞一个。 这篇文章我觉得最有意思的一句是对数据质量的强调“低质量数据在训练超过两个…...

多头潜在注意力(MLA):让大模型“轻装上阵”的技术革新——从DeepSeek看下一代语言模型的高效之路

多头潜在注意力&#xff08;MLA&#xff09;&#xff1a;让大模型“轻装上阵”的技术革新 ——从DeepSeek看下一代语言模型的高效之路 大模型的“内存焦虑” 当ChatGPT等大语言模型&#xff08;LLM&#xff09;惊艳世界时&#xff0c;很少有人意识到它们背后隐藏的“内存焦虑”…...

哈希表实现

目录 1. 哈希概念 1.1 直接定址法 1.2 哈希冲突 1.3 负载因子 1.4 将关键字转为整型 1.5 哈希函数 1.5.1 除法散列法/除留余数法 1.5.2 乘法散列法 1.5.3 全域散列法 1.5.4 其他方法 1.6 处理哈希冲突 1.6.1 开放定址法 1.6.1.1 线性探测 1.6.1.2 二次探测 1.6.…...

Linux的常用指令的用法

目录 Linux下基本指令 whoami ls指令&#xff1a; 文件&#xff1a; touch clear pwd cd mkdir rmdir指令 && rm 指令 man指令 cp mv cat more less head tail 管道和重定向 1. 重定向&#xff08;Redirection&#xff09; 2. 管道&#xff08;Pipes&a…...

Ubuntu安装VMware17

安装 下载本文的附件&#xff0c;之后执行 sudo chmod x VMware-Workstation-Full-17.5.2-23775571.x86_64.bundle sudo ./VMware-Workstation-Full-17.5.2-23775571.x86_64.bundle安装注意事项&#xff1a; 跳过账户登录的办法&#xff1a;断开网络 可能出现的问题以及解决…...

什么是线性化PDF?

线性化PDF是一种特殊的PDF文件组织方式。 总体而言&#xff0c;PDF是一种极为优雅且设计精良的格式。PDF由大量PDF对象构成&#xff0c;这些对象用于创建页面。相关信息存储在一棵二叉树中&#xff0c;该二叉树同时记录文件中每个对象的位置。因此&#xff0c;打开文件时只需加…...

每日一题——序列化二叉树

序列化二叉树 BM39 序列化二叉树题目描述序列化反序列化 示例示例1示例2 解题思路序列化过程反序列化过程 代码实现代码说明复杂度分析总结 BM39 序列化二叉树 题目描述 请实现两个函数&#xff0c;分别用来序列化和反序列化二叉树。二叉树的序列化是将二叉树按照某种遍历方式…...

Transformer+vit原理分析

目录 一、Transformer的核心思想 1. 自注意力机制&#xff08;Self-Attention&#xff09; 2. 多头注意力&#xff08;Multi-Head Attention&#xff09; 二、Transformer的架构 1. 整体结构 2. 编码器层&#xff08;Encoder Layer&#xff09; 3. 解码器层&#xff08;Decoder…...

「AI学习笔记」深度学习的起源与发展:从神经网络到大数据(二)

深度学习&#xff08;DL&#xff09;是现代人工智能&#xff08;AI&#xff09;的核心之一&#xff0c;但它并不是一夜之间出现的技术。从最初的理论提出到如今的广泛应用&#xff0c;深度学习经历了几乎一个世纪的不断探索与发展。今天&#xff0c;我们一起回顾深度学习的历史…...

【漫话机器学习系列】069.哈达马乘积(Hadamard Product)

哈达马乘积&#xff08;Hadamard Product&#xff09; 哈达马乘积&#xff08;Hadamard Product&#xff09;是两个矩阵之间的一种元素级操作&#xff0c;也称为逐元素乘积&#xff08;Element-wise Product&#xff09;。它以矩阵的对应元素相乘为规则&#xff0c;生成一个新…...

2025一区新风口:小波变换+KAN!速占!

今天给大家分享一个能让审稿人眼前一亮&#xff0c;好发一区的idea&#xff1a;小波变换KAN&#xff01; 一方面&#xff1a;KAN刚中稿ICLR25&#xff0c;正是风口上&#xff0c;与小波变换的结合还处于起步阶段&#xff0c;正是红利期&#xff0c;创新空间广阔。 另一方面&a…...

相同的树及延伸题型(C语言详解版)

从LeetCode 100和101看二叉树的比较与对称性判断 今天要讲的是leetcode100.相同的树&#xff0c;并且本文章还会讲到延伸题型leetcode101.对称二叉树。本文章编写用的是C语言&#xff0c;大家主要是学习思路&#xff0c;学习过后可以自己点击链接测试&#xff0c;并且做一些对…...

【Redis】 String 类型的介绍和常用命令

1. 介绍 Redis 中的 key 都是字符串类型Redis 中存储字符串是完全按照二进制流的形式保存的&#xff0c;所以 Redis 是不处理字符集编码的问题&#xff0c;客户端传入的命令中使用的是什么编码就采用什么编码&#xff0c;使得 Redis 能够处理各种类型的数据&#xff0c;包括文…...

LLM - 大模型 ScallingLaws 的设计 100B 预训练方案(PLM) 教程(5)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145356022 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Scaling Laws (缩放法则) 是大模型领域中,用于描述 模型性能(Loss) 与…...

Docker/K8S

文章目录 项目地址一、Docker1.1 创建一个Node服务image1.2 volume1.3 网络1.4 docker compose 二、K8S2.1 集群组成2.2 Pod1. 如何使用Pod(1) 运行一个pod(2) 运行多个pod 2.3 pod的生命周期2.4 pod中的容器1. 容器的生命周期2. 生命周期的回调3. 容器重启策略4. 自定义容器启…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...