随机数
import random
random.seed(3) # 设置随机数的种子数
print(random.randint(1, 100)) # 生成1~100之间的整数
print(random.uniform(-10, 10)) # 生成-10~10之间的浮点数(实数)
print(round(random.uniform(-10, 10), 2)) # 保留小数点后2位有效数字
numpy下载
pip install numpy -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
import numpy as np
#rand为通过numpy.random.RandomState()定义的一个随机变量的生成器
rand = np.random.RandomState(32) # 32为随机种子数
x = rand.randint(0, 10, (3, 6)) # 生成0~10之间,3行6列的矩阵
print(x)
-----------------------------------------
rand = np.random.RandomState(1) # 32为随机种子数
x = rand.rand(5) * 10
print(x)
#[4.17022005e+00 7.20324493e+00 1.14374817e-03 3.02332573e+00 #1.46755891e+00]
x = rand.rand(2, 5)
print(x)
#[[0.09233859 0.18626021 0.34556073 0.39676747 0.53881673]
#[0.41919451 0.6852195 0.20445225 0.87811744 0.02738759]]
x = rand.randn(5) + 5
print(x)
#[4.14009339 6.77260763 3.88963695 5.18121427 5.56434487]
- numpy.random.rand(d0,d1,…,dn)
1.rand函数根据给定维度生成[0,1)之间均匀分布的数据,包含0,不包含1
2.dn表格每个维度
3.返回值为指定维度的array
- numpy.random.randn(d0,d1,…,dn)
1.randn函数返回一个或一组样本,具有标准正态分布。
2.dn表格每个维度
3.返回值为指定维度的array
生成等距数列
import numpy as np
x = np.linspace(0, 10, 20) # 范围为0~10,含有20个元素
print(x)
#[ 0. 0.52631579 1.05263158 1.57894737 2.10526316 2.63157895
# 3.15789474 3.68421053 4.21052632 4.73684211 5.26315789 5.78947368
# 6.31578947 6.84210526 7.36842105 7.89473684 8.42105263 8.94736842
# 9.47368421 10. ]
数组
import numpy as np
a1 = np.arange(1, 20) # (start,end,step)
print(a1)
#[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
a2 = np.array([1, 3, 5])
print(a2)
#[1 3 5]
a3 = np.zeros((2, 2)) # 全0数组,()表示的是目标数组的形状
print(a3)
#[[0. 0.]
# [0. 0.]]
a4 = np.ones((2, 2)) # 全1数组
print(a4)
#[[1. 1.]
# [1. 1.]]
a5 = np.full((2, 2), 2) # full((),x) ()表示的是目标数组的形状,x表示的是数组的值
print(a5)
#[[2 2]
# [2 2]]
rand = np.random.RandomState(1)
a6 = rand.randint(0, 100, [3, 5]) # 0,100表示的是数据范围,[3,5]是数组的形状
print(a6)
#[[37 12 72 9 75]
# [ 5 79 64 16 1]
# [76 71 6 25 50]]
特征:
- shape代表数组的形状
- dtype代表数组的数据类型
import numpy as np
myArray1 = np.zeros(shape=(2,15),dtype=float)#shape可省略,可以是元组或列表
print(myArray1)
#[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
# [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
myArray2 = np.zeros((2, 3), dtype=float)
print(myArray2)
#[[0. 0. 0.]
# [0. 0. 0.]]
myArray3 = np.ones([2, 3], dtype=int)
print(myArray3)
#[[1 1 1]
# [1 1 1]]
切片的操作和列表类似
import numpy as np
myArray1 = np.arange(1, 20)
print(myArray1) # [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
print(myArray1[[1, 3, 5]]) # [2 4 6] 表示的是下标,有两层[] 不规律切片
print(myArray1[myArray1 < 5]) # [1 2 3 4]
print(myArray1[::-1]) # [19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1]
np.newaxis为指定一个新维度,shape()查看形状
import numpy as np
a = np.arange(1, 5)
print(a.shape) # (4,)
a = a[:, np.newaxis]
print(a)
#[[1]
# [2]
# [3]
# [4]]
print(a.shape)#(4, 1)
print(a[:, np.newaxis])
#[[[1]]
# [[2]]
# [[3]]
# [[4]]]
print(a[:, np.newaxis].shape) # (4, 1, 1)
print(a[np.newaxis, :])
#[[[1]
# [2]
# [3]
# [4]]]
print(a[np.newaxis, :].shape) # (1, 4, 1)
更改形状与多维切片
import numpy as np
myArray = np.arange(1, 21).reshape([5, 4])
print(myArray)
#[[ 1 2 3 4]
# [ 5 6 7 8]
# [ 9 10 11 12]
# [13 14 15 16]
# [17 18 19 20]]
print(myArray[[0, 2], 1]) # [ 2 10]
浅拷贝与深拷贝
浅拷贝:相当于共享地址,两者不相互独立
import numpy as np
a = np.arange(0,5)
b = a
b[1] = 10
print(a)
#[ 0 10 2 3 4]
深拷贝:两个空间,两者相互独立
import numpy as np
a = np.arange(0,5)
b = a.copy()
b[1] = 10
print(a)
#[0 1 2 3 4]
- reshape 直接修改了数组本身,resize返回一个新的数组
- 矩阵的转置: swapaxes()和transpose() 交换维度
- 多维数组转为一位数组 :flatten()
- 多维数组转化为嵌套列表: tolist()
- 重设数组元素数据类型: astype()
- 数组的三个常用属性,shape,ndim,size
- 查看数据类型type()
ndarray的计算:
- 乘法,相当于矩阵的乘法,对每个元素都乘对应的数
- 横向拆分 np.split()
- 纵向拆分 np.vsplit()
import numpy as np
myArray = np.arange(1, 21).reshape([5, 4])
print(myArray)
# 求矩阵的秩
print(myArray.ndim) # 2
# 横向拆分
print(np.split(myArray.flatten(), [3, 6]))
# [array([1, 2, 3]), array([4, 5, 6]), array([ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])]
# 纵向拆分
print(np.vsplit(myArray, [1, 2]))
'''
[array([[1, 2, 3, 4]]), array([[5, 6, 7, 8]]), array([[ 9, 10, 11, 12],
[13, 14, 15, 16],
[17, 18, 19, 20]])]
合并
axis=x 表示的是第x维
axis=0 表示列
axis=1 表示行
import numpy as np
myArray = np.array([[3, 4, 5], [6, 7, 8]])
myArray1 = np.array([[1, 2, 3], [2, 3, 4]])
print(myArray.shape) # (2, 3)
print(myArray1.shape) # (2, 3)
myArray2 = np.concatenate((myArray, myArray1), axis=0)
print(myArray2)
'''
[[3 4 5]
[6 7 8]
[1 2 3]
[2 3 4]]
'''
print(myArray2.shape) # (4, 3)
myArray2 = np.concatenate((myArray, myArray1), axis=1)
print(myArray2)
'''
[[3 4 5 1 2 3]
[6 7 8 2 3 4]]
'''
print(myArray2.shape) # (2, 6)
横向合并 vstack :列的个数相同,相当于np.concatenate((), axis=0)
纵向合并 hstack :行的个数相同,相当于np.concatenate((), axis=1)
numpy中的函数计算
import numpy as np
print(np.sum([0.5, 1.5]))
# 2.0
print(np.sum([0.5, 0.7, 0.2, 1.5], dtype=np.int32))
# 1 #这里是1因为先把所以的数据线转成int32类型再相加
print(np.sum([[0, 1], [0, 5]]))
# 6 #什么都不写就是全加起来
print(np.sum([[0, 1], [0, 5]], axis=0))
# array([0, 6]) #axis = 0代表列相加
print(np.sum([[0, 1], [0, 5]], axis=1))
# array([1, 5]) #axis = 1代表行相加
ndarray支持用户自定义元素的类型,通过设置dtype的参数
a1 = np.array([1, 2, 3, None])
print(a1) # [1 2 3 None]
a1 = np.array([1, 2, 3, None, np.nan])
print(a1) # [1 2 3 None nan]
print(a1.dtype) # object
插入与删除
import numpy as np
myArray1 = np.array([11, 12, 13, 14, 15, 16, 17])
a = np.delete(myArray1, 2)#2值的是下标
print(a) # [11 12 14 15 16 17]
print(myArray1) # [11 12 13 14 15 16 17]
a = np.insert(myArray1,2,97)#2为下标,97为值
print(a) # [11 12 97 13 14 15 16 17]
print(myArray1) # [11 12 13 14 15 16 17]
缺失值处理
- 判断是否有缺失值 np.isnan()
- np.any() 是否至少有1个
- np.all() 是否全部
import numpy as np
a = np.array([1, np.nan, 2, 3, 4, 5, 6])
print(np.isnan(a)) # [False True False False False False False]
print(np.any(np.isnan(a))) # True
print(np.all(np.isnan(a))) #False
print(np.nansum(a)) #21.0 可以求和操作,类型为float 0.0
print(np.sum(a)) #nan
None是python基础语法提供的特殊数据类型,不能参加算术运算
np.nan是numpy提供的数据类型,属于float类型,可以参加算术运算
ndarray的广播规则
如果列数一样但行数不一样,进行以行为单位的广播操作
import numpy as np
a = np.array([1, 2, 3, 4])
b = np.arange(1, 13).reshape(3, 4)
print(a + b)
#[[ 2 4 6 8]
# [ 6 8 10 12]
# [10 12 14 16]]
ndarray的排序
np.sort()对矩阵从小到大进行排序
np.argsort()返回排序后的下标
多维数组按指定维度排序——np.sort()中加一个轴参数axis
axit=1
-
计算前后的行数不变
-
以行为单位,每行独立计算
-
逐行计算
axit=0 -
计算前后的列数不变
-
以列为单位,每列独立计算
-
逐列计算
import numpy as np
a = np.array([1, 4, 6, 5, 7, 2, 3, 8, 10])
#'排序返回结果'
print(np.sort(a)) # [ 1 2 3 4 5 6 7 8 10]
#'排序返回下标'
print(np.argsort(a)) # [0 5 6 1 3 2 4 7 8]
a = a.reshape(3, 3)
print(a)
#[[ 1 4 6]
# [ 5 7 2]
# [ 3 8 10]]
#'按行排序'
print(np.sort(a, axis=0))
#[[ 1 4 2]
# [ 3 7 6]
# [ 5 8 10]]
# 按列排序
print(np.sort(a, axis=1))
#[[ 1 4 6]
# [ 2 5 7]
# [ 3 8 10]]