NumPy位运算和字符串函数知识点详解!

NumPy位运算和字符串函数知识点详解!

5 个月前

相信很多用Python的朋友对NumPy一定不陌生,NumPy做为Python语言的一个 扩展程序库 ,支持大量的维度 数组与矩阵运算 ,此外也针对数组运算提供大量的 数学函数库 。总结了几万字Numpy相关知识点。

已更新了:

戎易大数据:NumPy创建数组全部知识点!

戎易大数据:NumPy 数据类型与数组属性详解!

戎易大数据:学习NumPy必须掌握的知识点!

戎易大数据:1w字总结Numpy 数组操作所有知识点!

本篇为大家讲解NumPy 位运算和字符串函数。

01、NumPy位运算

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

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

函数 描述
bitwise_and 对数组元素执行位与操作
bitwise_or 对数组元素执行位或操作
invert 按位取反
left_shift 向左移动二进制表示的位
right_shift 向右移动二进制表示的位

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

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

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

bitwise_or

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

import numpy




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

输出结果为:

13和17的二进制形式
0b1101 0b10001
13和17的位或
29

invertinvert() 函数对数组中整数进行位取反运算,即 0 变成 1,1 变成 0。

对于有符号整数,取该二进制数的补码,然后 +1。二进制数,最高位为0表示正数,最高位为 1 表示负数。看看 ~1 的计算步骤:

  • 1 (这里叫:原码)转二进制 = 00000001
  • 按位取反 = 11111110
  • 发现符号位(即最高位)为 1 (表示负数),将除符号位之外的其他数字取反 = 10000001
  • 末位加1取其补码 = 10000010
  • 转换回十进制 = -2
表达式 二进制值(2 的补数) 十进制值
5 00000000 00000000 00000000 0000010 5
~5 11111111 11111111 11111111 11111010 -6
import numpy as np
print('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))

输出结果为:

13的位反转其中 ndarray  dtype  uint8
[242]
13的二进制表示
00001101
242的二进制表示
11110010

left_shift

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

import numpy as np
print('将 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。

输出结果为:

将10左移两位
10的二进制表示
00001010
40的二进制表示
00101000

right_shift

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

import numpy as np
print('将 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。

输出结果为:

将40右移两位
40的二进制表示
00101000
10的二进制表示
00001010

02、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

numpy.char.add()

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

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

输出结果为:

连接两个字符串
['hello xyz']
连接示例
['hello abc''hi xyz']

numpy.char.multiply()

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

import numpy as np
print(np.char.multiply('Runoob ',3))

输出结果为:

Runoob Runoob Runoob

numpy.char.center()

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

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

输出结果为:

*******Runoob*******

numpy.char.capitalize()

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

import numpy as np
print(np.char.capitalize('runoob'))

输出结果为:

Runoob

numpy.char.title()

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

import numpy as np
print(np.char.title('i like runoob'))

输出结果为:

I Like Runoob

numpy.char.lower()

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

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

输出结果为:

['runoob''google']
runoob

numpy.char.upper()

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

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

输出结果为:

['RUNOOB''GOOGLE']
RUNOOB

numpy.char.split()

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

import numpy as np
# 分隔符默认为空格
print(np.char.split('i like runoob?'))
# 分隔符为 .
print(np.char.split('www.runoob.com', sep = '.'))

输出结果为:

['i','like','runoob?']
['www','runoob','com']

numpy.char.splitlines()

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

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

输出结果为:

['i','like runoob?']
['i','like runoob?']

\n \r \r\n 都可用作换行符。

numpy.char.strip()

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

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

输出结果为:

shok arunoob
['runoob''dmin''jav']

numpy.char.join()

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

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

输出结果为:

r:u:n:o:o:b
['r:u:n:o:o:b' 'g-o-o-g-l-e']

numpy.char.replace()

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

import numpy as np
print(np.char.replace('i like runoob', 'oo', 'cc'))

输出结果为:

i like runccb

numpy.char.encode()

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

import numpy as np
a = np.char.encode('runoob', 'cp500')