目录
-
切片与索引
1.slice切片
# slice切片
a = np.arange(10)
print(a)
# slice(start, stop[, step])
s = slice(2, 10, 2)
print(a[s])
[0 1 2 3 4 5 6 7 8 9]
[2 4 6 8]
2.直接切片
# 直接切片
b = a[2:10:2]
print(b)
[2 4 6 8]
3.对单个元素进行切片
# 对单个元素进行切片
print(a[5])
5
4.从开始进行切片
# 从开始进行切片
c = a[5:]
print(c)
[2 3 4 5 6 7 8 9]
5.指定开始和结束位置进行切片
# 指定开始和结束位置进行切片
d = a[4:8]
print(d)
[4 5 6 7]
-
整数索引
x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(x)
[[1 2 3]
[4 5 6]
[7 8 9]]
1.取出指定位置的元素
# 取出(0,0),(1,1),(2,0)位置的元素
y = x[[0, 1, 2], [0, 1, 0]]
print(y)
[1 5 7]
2.取出四个角的元素
# 取出四个角的元素
x = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
print(x)
rows = np.array([[0, 0], [3, 3]])
cols = np.array([[0, 3], [0, 3]])
y = x[rows, cols]
print(y)
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]]
[[ 1 4]
[13 16]]
-
布尔索引
x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(x)
[[1 2 3]
[4 5 6]
[7 8 9]]
1.取出大于5的元素
# 取出大于5的元素
y = x[x>5]
print(y)
[6 7 8 9]
2.取出等于5的元素
# 取出等于5的元素
print(x[x==5])
[5]
-
数组广播
1.同维矩阵操作
# 同维矩阵操作
a = np.array([1, 2, 3, 4, 5])
b = np.array([10, 20, 30, 40, 50])
# 相加
print(a+b)
# 相乘
print(a*b)
# 相减
print(b-a)
[11 22 33 44 55]
[ 10 40 90 160 250]
[ 9 18 27 36 45]
2.不同维度矩阵操作,需要广播
# 不同维度矩阵操作,需要广播
a = np.array([[1, 1, 1], [10, 10 ,10], [20, 20, 20]])
b = np.array([1, 2, 3])
print(a)
print(b)
print(a+b)
print(a-b)
[[ 1 1 1]
[10 10 10]
[20 20 20]]
[1 2 3]
[[ 2 3 4]
[11 12 13]
[21 22 23]]
[[ 0 -1 -2]
[ 9 8 7]
[19 18 17]]
-
数组翻转
1.numpy.reshape()
# reshape
a = np.arange(10)
print("原始数组:\n", a)
b = a.reshape(2, 5)
print("reshape后的数组:\n", b)
原始数组:
[0 1 2 3 4 5 6 7 8 9]
reshape后的数组:
[[0 1 2 3 4]
[5 6 7 8 9]]
2.numpy.ndarray.flat()
# ndarray.flat
a = np.arange(10).reshape(2, 5)
print("数组a:\n", a)
print("调用flat:\n", a.flat[:])
print(a.flat[6])
数组a:
[[0 1 2 3 4]
[5 6 7 8 9]]
调用flat:
[0 1 2 3 4 5 6 7 8 9]
6
3.numpy.ndarray.flatten()
# ndarray.flatten
print("数组a:\n", a)
print("调用flatten:\n", a.flatten())
数组a:
[[0 1 2 3 4]
[5 6 7 8 9]]
调用flatten:
[0 1 2 3 4 5 6 7 8 9]
4.numpy.ndarray.T
# ndarray.T
print("数组a:\n", a)
print("调用T:\n", a.T)
数组a:
[[0 1 2 3 4]
[5 6 7 8 9]]
调用T:
[[0 5]
[1 6]
[2 7]
[3 8]
[4 9]]
-
数组链接
1.numpy.concatenate()
# concatenate
a = np.arange(6).reshape(2, 3)
print("数组a:\n", a)
b = np.array([[7, 8, 9], [10, 11, 12]])
print("数组b:\n", b)
# 沿着0轴进行链接
print("沿着0轴进行链接:\n", np.concatenate((a, b)))
# 沿着1轴进行链接
print("沿着1轴进行链接:\n", np.concatenate((a, b), axis=1))
数组a:
[[0 1 2]
[3 4 5]]
数组b:
[[ 7 8 9]
[10 11 12]]
沿着0轴进行链接:
[[ 0 1 2]
[ 3 4 5]
[ 7 8 9]
[10 11 12]]
沿着0轴进行链接:
[[ 0 1 2 7 8 9]
[ 3 4 5 10 11 12]]
2.numpy.stack()
# stack
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[7, 8, 9], [10, 11, 12]])
print("数组a:\n", a)
print("数组b:\n", b)
# 沿着0轴堆叠两个矩阵
print("沿着0轴堆叠两个矩阵:\n", np.stack((a, b), 0))
# 沿着1轴堆叠两个矩阵
print("沿着1轴堆叠两个矩阵:\n", np.stack((a, b), 1))
数组a:
[[1 2 3]
[4 5 6]]
数组b:
[[ 7 8 9]
[10 11 12]]
沿着0轴堆叠两个矩阵:
[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]]
沿着1轴堆叠两个矩阵:
[[[ 1 2 3]
[ 7 8 9]]
[[ 4 5 6]
[10 11 12]]]
3.numpy.hstack() 水平堆叠/numpy.vstack() 竖直堆叠
# hstack 水平方向
# vstack 竖直方向
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print("数组a:\n", a)
print("数组b:\n", b)
# 水平堆叠
print("水平堆叠:\n", np.hstack((a, b)))
# 竖直堆叠
print("竖直堆叠:\n", np.vstack((a, b)))
数组a:
[[1 2]
[3 4]]
数组b:
[[5 6]
[7 8]]
水平堆叠:
[[1 2 5 6]
[3 4 7 8]]
竖直堆叠:
[[1 2]
[3 4]
[5 6]
[7 8]]
-
数组分割
1.numpy.split()
# split
a = np.arange(12)
print("数组a:\n", a)
# 将数组a分割成大小相等的三个子数组
b = np.split(a, 3)
print("数组b:\n", b)
# 在数组中明确位置进行分割
c = np.split(a, [4, 7])
print("明确位置分割:\n", c)
数组a:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
数组b:
[array([0, 1, 2, 3]), array([4, 5, 6, 7]), array([ 8, 9, 10, 11])]
明确位置分割:
[array([0, 1, 2, 3]), array([4, 5, 6]), array([ 7, 8, 9, 10, 11])]
2.numpy.hsplit() 水平分割/numpy.vsplit() 竖直分割
# hsplit 水平方向
# vsplit 竖直方向
a = np.arange(16).reshape(4, 4)
print("数组a:\n", a)
# 水平分割
b = np.hsplit(a, 2)
print("水平分割:\n", b)
# 竖直分割
c = np.vsplit(a, 2)
print("竖直分割:\n", c)
数组a:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
水平分割:
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
竖直分割:
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
-
数组操作
1. numpy.resize()
# resize
a = np.array([[1, 2, 3], [4, 5, 6]])
print("数组a:\n", a, a.shape)
b = np.resize(a, (3, 2))
print("resize数组b:\n", b)
数组a:
[[1 2 3]
[4 5 6]] (2, 3)
resize数组b:
[[1 2]
[3 4]
[5 6]]
2.numpy.append()
# append
a = np.arange(10).reshape(2, 5)
print("数组a:\n", a)
# 往数组中添加元素
print("直接添加:\n", np.append(a, [10, 11, 12]))
# 沿着0轴进行添加
print("沿0轴添加:\n", np.append(a, [[10, 11, 12, 13, 14]], axis=0))
# 沿着1轴进行添加
print("沿1轴添加:\n", np.append(a, [[6, 6, 6], [7, 7, 7]], axis=1))
数组a:
[[0 1 2 3 4]
[5 6 7 8 9]]
直接添加:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12]
沿0轴添加:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
沿1轴添加:
[[0 1 2 3 4 6 6 6]
[5 6 7 8 9 7 7 7]]
3.numpy.insert()
a = np.array([[1, 2], [3, 4], [5, 6]])
print("数组a:\n", a)
# 未传入axis参数,插入时会展开为一维数组
print("未传入axis参数:\n", np.insert(a, 6, [8, 9]))
# 沿着0轴进行添加
print("沿着0轴添加:\n", np.insert(a, 1, [8, 9], axis=0))
# 沿着1轴进行添加
print("沿着1轴添加:\n", np.insert(a, 1, [8], axis=1))
数组a:
[[1 2]
[3 4]
[5 6]]
未传入axis参数:
[1 2 3 4 5 6 8 9]
沿着0轴添加:
[[1 2]
[8 9]
[3 4]
[5 6]]
沿着1轴添加:
[[1 8 2]
[3 8 4]
[5 8 6]]
4.numpy.delete()
# delete
a = np.arange(12).reshape(3, 4)
print("数组a:\n", a)
# 未传入axis参数,删除后会展开为一维数组
print("未传入axis参数:\n", np.delete(a, 6))
# 按行删除
print("按行删除:\n", np.delete(a, 2, axis=0))
# 按列删除
print("按列删除:\n", np.delete(a, 0, axis=1))
数组a:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
未传入axis参数:
[ 0 1 2 3 4 5 7 8 9 10 11]
按行删除:
[[0 1 2 3]
[4 5 6 7]]
按列删除:
[[ 1 2 3]
[ 5 6 7]
[ 9 10 11]]
5.numpy.unique()
# unique
a = np.array([1, 2, 3, 4, 5, 5, 5, 5, 6, 6, 6, 7, 8, 9, 9, 9, 9])
print("数组a:\n", a)
# unique剔除重复元素
print("删除重复元素:\n", np.unique(a))
数组a:
[1 2 3 4 5 5 5 5 6 6 6 7 8 9 9 9 9]
删除重复元素:
[1 2 3 4 5 6 7 8 9]
-
字符串操作
1.add() 返回两个str或Unicode数组的逐个字符串连接
# add 字符串连接
a = 'hello'
b = 'han'
c = np.char.add(a, b)
print(c)
hellohan
a = ['hello', 'hi']
b = ['han', 'yukio']
c = np.char.add(a, b)
print(c)
['hellohan' 'hiyukio']
2.multiply() 返回按元素多重连接后的字符串
# multiply 返回按元素多重连接后的字符串
a = 'hello'
b = np.char.multiply(a, 5)
print(b)
hellohellohellohellohello
3.center() 返回给定字符串的副本,其中元素位于特定字符串的中央
# center 返回给定字符串的副本,其中元素位于特定字符串的中央
a = 'hello'
b = np.char.center(a, 30, fillchar='*')
print(b)
************hello*************
4.capitalize() 返回给定字符串的副本,其中只有第一个字符串大写
# capitalize 返回给定字符串的副本,其中只有第一个字符串大写
a = 'hello han'
b = np.char.capitalize(a)
print(b)
Hello han
5.title() 返回字符串或Unicode的按元素标题转换版本
# title 返回字符串或Unicode的按元素标题转换版本
a = 'hello han'
b = np.char.title(a)
print(b)
Hello Han
6.lower() 返回一个数组,其元素转换为小写
# lower 返回一个数组,其元素转换为小写
a = 'HELLO HAN'
b = np.char.lower(a)
print(b)
hello han
7.upper() 返回一个数组,其元素转换为大写
# upper 返回一个数组,其元素转换为大写
a = 'hello han'
b = np.char.upper(a)
print(b)
HELLO HAN
8.split() 返回字符串中的单词列表,并使用分隔符来分割
# split 返回字符串中的单词列表,并使用分隔符来分割
a = 'hello how are you'
b = np.char.split(a)
print(b)
['hello', 'how', 'are', 'you']
a = 'hello$how$are$you'
b = np.char.split(a, '$')
print(b)
['hello', 'how', 'are', 'you']
9.splitlines() 返回元素中的行列表,以换行符分割
# splitlines 返回元素中的行列表,以换行符分割
a = 'hello\nhow are you'
b = np.char.splitlines(a)
print(b)
['hello', 'how are you']
10.strip() 返回数组副本,其中元素移除了开头或者结尾处的特定字符
# strip 返回数组副本,其中元素移除了开头或者结尾处的特定字符
a = ' hello han '
b = np.char.strip(a)
print(b)
hello han
a = 'ahello hana'
b = np.char.strip(a, 'a')
print(b)
hello han
11.join() 返回一个字符串,它是序列中字符串的连接
# join 返回一个字符串,它是序列中字符串的连接
a = 'hello'
b = np.char.join('-', a)
print(b)
h-e-l-l-o
12.replace() 返回字符串的副本,其中所有子字符串的出现位置都被新字符串取代
# replace 返回字符串的副本,其中所有子字符串的出现位置都被新字符串取代
a = 'he is a good boy'
b = np.char.replace(a, 'is', 'was')
print(b)
he was a good boy
13.encode() 按元素调用str.encode
# encode
a = '你好'
b = np.char.encode(a, 'gbk')
print(a)
print(b)
你好
b'\xc4\xe3\xba\xc3'
14.decode() 按元素调用str.decode
# decode
c = np.char.decode(b, 'gbk')
print(c)
你好