NumPy位运算和字符串函数知识点详解!
相信很多用Python的朋友对NumPy一定不陌生,NumPy做为Python语言的一个 扩展程序库 ,支持大量的维度 数组与矩阵运算 ,此外也针对数组运算提供大量的 数学函数库 。总结了几万字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')