当前位置: 首页 > 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. 自定义容器启…...

AntimicroX完全指南:游戏手柄映射的艺术与科学

AntimicroX完全指南&#xff1a;游戏手柄映射的艺术与科学 【免费下载链接】antimicrox Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. 项目地址: https://gitcode.com/GitHub_Trend…...

从农田到实验室:大疆P4M多光谱数据与ASD地物波谱仪实测数据对比实操指南

从农田到实验室&#xff1a;大疆P4M多光谱数据与ASD地物波谱仪实测数据对比实操指南 当无人机掠过农田上空&#xff0c;搭载的多光谱传感器正在以厘米级分辨率记录作物的生理状态。这些数据能否真实反映地表反射特性&#xff1f;本文将以大疆P4M多光谱无人机与ASD FieldSpec系…...

鱼鱼刘怀旧手游|武林外传十年之约:同福灯火未熄,江湖老友归来

鱼鱼刘怀旧手游是国内人气老牌怀旧游戏专属平台&#xff0c;汇聚多款经典正版授权复刻手游&#xff0c;严格遵循端游原版设定匠心 1:1 还原复刻。本次特意为广大新手玩家准备了详细游戏攻略指南 ——岁月辗转&#xff0c;一晃十年。当年七侠镇的青石板还留着脚步&#xff0c;同…...

Linux七大常见误解与真相解析

1. Linux 神话的起源与现状Linux 作为开源操作系统的代表&#xff0c;自1991年诞生以来就伴随着各种误解和神话。这些误解往往源于早期Linux的使用门槛较高、图形界面不够完善等历史原因。但经过30多年的发展&#xff0c;现代Linux发行版已经发生了翻天覆地的变化。在技术社区中…...

从零到一:LRFormer (TPAMI 2025) 实战部署与避坑指南

1. 为什么选择LRFormer&#xff1f; 最近在复现TPAMI 2025上的LRFormer模型时&#xff0c;我发现这个基于局部-全局关系建模的视觉Transformer确实有不少亮点。相比传统CNN模型&#xff0c;它在处理长距离依赖关系时表现更出色&#xff0c;特别是在细粒度图像分类任务上&#x…...

探索AI辅助开发新范式:让快马平台成为你的专属前端智囊

最近在做一个需要收集用户反馈的小项目&#xff0c;发现用传统的表单方式实在太死板了。正好看到InsCode(快马)平台的AI辅助开发功能&#xff0c;决定试试用AI生成一个交互式反馈墙。没想到整个过程出奇地顺利&#xff0c;这里分享一下我的实践心得。 需求分析阶段 我首先在平…...

新手最值得入的一款ai音乐工具

2026年&#xff0c;ai音乐爆发的一年。国内国外各种AI音乐工具层出不穷。想要尝试AI音乐的新手宝宝该怎么去选择呢&#xff1f;市面上大大小小的ai音乐创作软件我基本都尝试过。我觉得只有一款工具是最值得推荐的&#xff0c;也是我使用的最多的。那就是蘑兔AI&#xff0c;你们…...

苏州沃虎电子(VOOHU)10/100M集成式RJ45连接器SYT111B002BA2A1D产品介绍

苏州沃虎电子科技有限公司&#xff08;品牌&#xff1a;VOOHU&#xff09;供应的 SYT111B002BA2A1D 是一款高可靠性集成式RJ45连接器&#xff0c;专为10/100M以太网应用设计。该产品采用90侧插DIP封装&#xff0c;内置网络变压器&#xff0c;具备工业级宽温工作能力和优异的信号…...

[特殊字符] Nano-Banana效果分享:电动工具齿轮箱高精度啮合关系可视化拆解图

Nano-Banana效果分享&#xff1a;电动工具齿轮箱高精度啮合关系可视化拆解图 你有没有想过&#xff0c;一个复杂的电动工具内部到底长什么样&#xff1f;那些精密的齿轮是如何咬合在一起&#xff0c;将电机的旋转变成强大动力的&#xff1f;传统的产品说明书往往只有一张模糊的…...

Android设备指纹采集指南:从get_token协议看短视频SDK如何生成唯一设备ID

Android设备指纹生成机制深度解析&#xff1a;从基础原理到合规实践 在移动应用生态中&#xff0c;设备指纹技术扮演着至关重要的角色。它不仅关系到用户体验的连贯性&#xff0c;更是风控系统的基础支撑。本文将系统性地剖析Android平台下设备指纹的生成逻辑、技术实现方案以及…...