numpy常用函数
tip:推荐使用jupyter notebook进行numpy的学习
文章目录
- numpy常用函数
- 导包
- 创建数组
- 创建全0的数组np.zeros()
- 获取尺寸shape
- 创建全为1的数组np.ones()
- 创建递增或递减的数列np.arange()
- 创建等间距数组np.linspace()
- 随机数组np.random.rand()
- 数据类型dtype
- 数学运算
- 广播
- 返回数组中最大或者最小元素
- 总和/平均/中位数/方差/标准差
- 按指定维度相加sum(axis=0)
- 索引元素
- 创建等差数组np.arange()
- 按条件筛选制定元素
- 索引切片(跨度/逆向数组/....)
- 拼接np.append()
- np.where(condition, x, y)
- np.where(condition)
- 改变维度reshape()
- 扩展维度reshape()
- 扩展维度np.expand_dims()
- 扩展知识
导包
import numpy as np
创建数组
# 创建数组
np.array([1,2,3,4,5])
array([1, 2, 3, 4, 5])
创建全0的数组np.zeros()
# 创建全0的数组
np.zeros((3,2))
# 3行2列
array([[0., 0.],
[0., 0.],
[0., 0.]])
获取尺寸shape
a = np.zeros((3,2))
a.shape # 获取数组的尺寸
(3, 2)
创建全为1的数组np.ones()
np.ones((2,4))
array([[1., 1., 1., 1.],
[1., 1., 1., 1.]])
创建递增或递减的数列np.arange()
np.arange(3,7)
array([3, 4, 5, 6])
创建等间距数组np.linspace()
# 返回介于某个区间,等间距分布的数
# 前两个参数是输出范围,第三个参数是样本的总数
np.linspace(0,1,5)
array([0. , 0.25, 0.5 , 0.75, 1. ])
随机数组np.random.rand()
# 生成随机数组
np.random.rand(2,4)
array([[0.68604587, 0.44553674, 0.48468352, 0.38850138],
[0.42703367, 0.02678288, 0.75816718, 0.43497204]])
数据类型dtype
# 在numpy中,数组默认的数据类型是64位的浮点数
a = np.zeros((4,2))
a.dtype
dtype('float64')
创建时指定类型
# 制定数据类型
np.zeros((4,2),dtype=np.int32)
array([[0, 0],
[0, 0],
[0, 0],
[0, 0]], dtype=int32)
常用类型:
- np.int8/16/32/64 整形
- np.uint8/16/32/64 无符号整型
- np.float32/64 浮点数
- bool 布尔值
- str 字符串
类型转换:
# 对现有数组,可以通过astype()来转换数据类型
a = np.zeros((2,4))
b = a.astype(int)
b
array([[0, 0, 0, 0],
[0, 0, 0, 0]])
数学运算
加法
a = np.array([1,2,3])
b = np.array([4,5,6])
a + b
array([5, 7, 9])
减法
a - b
array([-3, -3, -3])
对两个向量,进行点乘运算
np.dot(a,b)
32
@
会进行矩阵的乘法运算
# @会进行矩阵的乘法运算
a = np.array([[1,2],[3,4]])
b = np.array([[2,0],[0,2]])
a @ b
array([[2, 4],
[6, 8]])
对所有数依次求平方根
np.sqrt(a)
array([[1. , 1.41421356],
[1.73205081, 2. ]])
三角函数:
a = np.array([[1,2],[3,4]])
np.sin(a)
array([[ 0.84147098, 0.90929743],
[ 0.14112001, -0.7568025 ]])
np.cos(a)
array([[ 0.54030231, -0.41614684],
[-0.9899925 , -0.65364362]])
np.log(a)
array([[0. , 0.69314718],
[1.09861229, 1.38629436]])
2次方
a = np.array([[1,2],[3,4]])
np.power(a,2)
array([[ 1, 4],
[ 9, 16]])
广播
# a中每一个数均与5相乘,这个操作叫做 广播
a = np.array([[1,2],[3,4]])
a * 5
array([[ 5, 10],
[15, 20]])
不同尺寸的数组,也可以进行广播运算
a = np.array([[1],
[20],
[30]])
b = np.array([0,1,2])
a + b
array([[ 1, 2, 3],
[20, 21, 22],
[30, 31, 32]])
返回数组中最大或者最小元素
a = np.array([1,2,4,5,6])
# 最大
a.max()
6
# 最小
a.min()
1
# 返回最大元素所在的索引,从0开始
a.argmax()
4
# 返回最小元素所在的索引,从0开始
a.argmin()
0
总和/平均/中位数/方差/标准差
返回所有数据的总和
# 返回所有数据的总和
a = np.array([1,2,4,5,6])
a.sum()
18
返回平均数
a = np.array([1,2,4,5,6])
a.mean() # 返回平均数
3.6
返回中位数
a = np.array([1,2,4,5,6])
np.median(a) # 返回中位数
4.0
返回数据的方差
a = np.array([1,2,4,5,6])
a.var() # 返回数据的方差
3.44
返回标准方差
a = np.array([1,2,4,5,6])
a.std()
1.8547236990991407
按指定维度相加sum(axis=0)
a = np.array([[1,2,3,4,5],
[5,6,7,8,9]])
a.sum(axis=0) # 0代表第一个维度,也就是“行”,按行相加
array([ 6, 8, 10, 12, 14])
按列
a.sum(axis=1)
array([15, 35])
索引元素
# 获取制定元素
a = np.array([[1,2,3,4,5],
[5,6,7,8,9]])
a[0,1] # 获取第一行,第2列
2
创建等差数组np.arange()
a = np.arange(10)
a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
按条件筛选制定元素
# 按条件筛选制定元素
a = np.arange(10)
a[a<3]
array([0, 1, 2])
# 通过逻辑运算符,组合不同的条件
a[(a>3)&(a%2==0)] # 大于3并且是偶数
array([4, 6, 8])
索引切片(跨度/逆向数组/…)
a = np.array([[1,2,4],
[4,5,6]])
a[0,0:2] # 类似切片的语法,0:2代表[0,2),不包括2
array([1, 2])
a = np.array([[1,2,4],
[4,5,6]])
a[0,:] #获取第一行所有元素,可以单写一个:
array([1, 2, 4])
a = np.array([[1,2,4],
[4,5,6]])
a[0] # 直接省略:
array([1, 2, 4])
a=np.array([1,2,3,4,5,6,7,8,9])
a[0:9:2] # 第二个冒号后面可以跟一个跨度(Stride)
array([1, 3, 5, 7, 9])
a=np.array([1,2,3,4,5,6,7,8,9])
a[8:0:-2] # 这个跨度也可以取负值
array([9, 7, 5, 3])
a=np.array([1,2,3,4,5,6,7,8,9])
a[::-1] # 逆向返回数组
array([9, 8, 7, 6, 5, 4, 3, 2, 1])
拼接np.append()
x = np.array([[1,0,0,1],[1,1,1,1]])
x=np.append(x,[0,0,0,0])
x
array([1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0])
a = np.array([1,2,3,4,5,6])
print(a)
a = np.append(a,7)
print(a)
a = np.append(a,[1,2,3])
print(a)
[1 2 3 4 5 6]
[1 2 3 4 5 6 7]
[1 2 3 4 5 6 7 1 2 3]
np.where(condition, x, y)
满足条件(condition),输出x,不满足输出y。
y = np.array([1,2,3,4,5])
np.where(y>2,y,0)
array([0, 0, 3, 4, 5])
y = np.array([2,4,6,8,10])
np.where(a > 5)
(array([2, 3, 4]),)
np.where(condition)
只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标 (等价于numpy.nonzero)。这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。
y[np.where(a > 5)] # 等价于 a[a>5]
array([ 6, 8, 10])
改变维度reshape()
x = np.array([1,2,3,4,5,6])
print(x.reshape(2,3))
print(x.reshape([2,3])) # 也可以添加中括号
print(x.reshape([3,2])) # 也可以添加中括号
[[1 2 3]
[4 5 6]]
[[1 2 3]
[4 5 6]]
[[1 2]
[3 4]
[5 6]]
扩展维度reshape()
y = np.array([[1,2],[4,4]])
print("原shape:",y.shape)
# 扩展维度,在其中添加数字1
print(y.reshape([1,2,2]))
print(y.reshape([2,1,2]))
print(y.reshape([2,2,1,1]))
原shape: (2, 2)
输出1
[[[1 2]
[4 4]]]
输出2
[[[1 2]]
[[4 4]]]
输出3
[[[[1]]
[[2]]]
[[[4]]
[[4]]]]
扩展维度np.expand_dims()
b =np.array([[1,2],[3,4],[5,6]])
print(b.shape)
(3, 2)
b1 = np.expand_dims(b, -1) # 在最后添加一个维度 (3,2)->(3,2,1)
print(b1)
print(b1.shape)
[[[1]
[2]]
[[3]
[4]]
[[5]
[6]]]
(3, 2, 1)
b2 = np.expand_dims(b, 0) # 在最前(第0维)插入一个维度 (3,2)->(1,3,2)
print(b2)
print(b2.shape)
[[[1 2]
[3 4]
[5 6]]]
(1, 3, 2)
b3 = np.expand_dims(b, 1) # 在第二维度 插入一个维度 (3,2)->(3,1,2)
print(b3)
print(b3.shape)
[[[1 2]]
[[3 4]]
[[5 6]]]
(3, 1, 2)
扩展知识
普通Python列表拼接
a = [1,2,3,4,5,6]
b = [10,20,30,40,50,60]
x = int(len(a)/2)
a[:x] + b[x:]
[1, 2, 3, 40, 50, 60]
随机数
import random
random.randint(0,9)
0
多维列表拼接
a = [[1,3,5],[1,34,4]]
b = [[1,1,1]]
a+b
[[1, 3, 5], [1, 34, 4], [1, 1, 1]]
随时数
a = [1,2,3,4,5,6]
random.randint(0,len(a))
6