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

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...