# 导入numpy模块
# 一般采用np简写
import numpy as np
# 定义一个二维数组
array = np.array([[1,2,3],[3,4,5]])
print(array)
type(array)
[[1 2 3]
[3 4 5]]
numpy.ndarray
array.ndim#查看维度
2
array.shape# 大小形状
(2, 3)
array.size# 元素的个数
6
# 在创建时设置类型
a = np.array([2,3,4],dtype=np.int)
print(a.dtype)
int32
a = np.array([2,3,4],dtype=np.float)
print(a.dtype)
float64
# 设置32位
a = np.array([2,3,4],dtype=np.float32)
print(a.dtype)
float32
# 创建全为0的数组
a = np.zeros((3,4),dtype=np.int)
a
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
# 创建全为1的数组
a = np.ones((3,3),dtype=np.int)
a
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
# 创建全为空的
a = np.empty((3,4))
a
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
# 创建连续的,创建10到20步长为2的
a = np.arange(10,20,2)
a
array([10, 12, 14, 16, 18])
# 改变a的形状
a = np.arange(12)
a.reshape(3,4)
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
# 1到10 分割成20个内容
a = np.linspace(1,10,20)
a
array([ 1. , 1.47368421, 1.94736842, 2.42105263, 2.89473684,
3.36842105, 3.84210526, 4.31578947, 4.78947368, 5.26315789,
5.73684211, 6.21052632, 6.68421053, 7.15789474, 7.63157895,
8.10526316, 8.57894737, 9.05263158, 9.52631579, 10. ])
# 俩个数组
a = np.array([1,2,3,4])
b = np.array([5,6,7,8])
# 数组之间的加减乘除
# 相加
a + b
array([ 6, 8, 10, 12])
# 相减
a - b
array([-4, -4, -4, -4])
# 相乘
a * b
array([ 5, 12, 21, 32])
# 求幂
a ** b
array([ 1, 64, 2187, 65536], dtype=int32)
# 数组与数字间的加减乘除
a + 4
array([ 3, 6, 9, 12])
a - 4
array([-3, -2, -1, 0])
a * 3
array([ 3, 6, 9, 12])
a / 4
array([0.25, 0.5 , 0.75, 1. ])
# 数组的逻辑运算
a > 3
array([False, False, False, True])
a == 3
array([False, False, True, False])
#求和的方法
np.sum(a)
10
#求最小值
np.min(a)
1
# 最大值
np.max(a)
4
# 生成随机值
c = np.random.random((2,4))
c
array([[0.23305925, 0.32964137, 0.47588554, 0.0449932 ],
[0.58350407, 0.32060233, 0.28159512, 0.1468061 ]])
# axis为1的时候,求每一行的和
np.sum(c,axis=1)
array([1.08357936, 1.33250763])
# axis为0的时候,求每一列的和
np.sum(c,axis=0)
array([0.81656333, 0.6502437 , 0.75748067, 0.1917993 ])
# 求平均值
np.average(a)
2.5
# 求中位数
np.median(c)
0.3010987291013179
# 累加的操作,逐个累加
np.cumsum(a)
array([ 1, 3, 6, 10], dtype=int32)
# 转置
d = a.reshape(2,2)
d
array([[1, 2],
[3, 4]])
d.T
array([[1, 3],
[2, 4]])
# 也是转置
np.transpose(d)
array([[1, 3],
[2, 4]])
a = np.arange(10)
a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 取出第三个数
a[2]
2
# 取二维数组的数
a.reshape(2,5)
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
# 现在[1]代表了一行
b[1]
array([5, 6, 7, 8, 9])
# 取出5
b[1][0]
5
# 第一个代表了第几行,第二个数字代表了第几列,行列都是从0开始计算
b[1,0]
5
# 取出第二行,第三四五列
b[1,2:]
array([7, 8, 9])
# 第二行,第一二列
b[1,0:2]
array([5, 6])
# 选出b中大于五的
b[b>5]
array([6, 7, 8, 9])
a = np.array([1,2,3])
b = np.array([4,5,6])
# 垂直合并 上下合并
np.vstack((a,b))
array([[1, 2, 3],
[4, 5, 6]])
# 水平合并 左右合并
np.hstack((a,b))
array([1, 2, 3, 4, 5, 6])
# 分割操作
c = np.arange(12).reshape(3,4)
c
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
# 垂直分割 分割成俩分
np.split(c,2,axis=1)
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
# 水平分割 分成三份
np.split(c,3,axis=0)
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10,
11]])]
# 不等量分割
np.array_split(c,2,axis=0)
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
# 垂直分割
np.hsplit(c,2)
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2, 3],
[ 6, 7],
[10, 11]])]
#水平分割
np.vsplit(c,3)
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10,
11]])]
# 复制
a = np.array([1,2,3,4])
b = a
c = b
a[1] = 100
b
array([ 1, 100, 3, 4])
c
array([ 1, 100, 3, 4])
# 复制操作
b = a.copy()
b
array([ 1, 100, 3, 4])
a[1] = 1
b
array([ 1, 100, 3, 4])
a = np.array([[1,2,3],[4,5,6]])
a
array([[1, 2, 3],
[4, 5, 6]])
# 追加
np.append(a,[7,8,9])
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
# 追加行,注意:追加的数据也是二维的
np.append(a,[[7,8,9]],axis=0)
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 追加列
np.append(a,[[7,8],[8,9]],axis=1)
array([[1, 2, 3, 7, 8],
[4, 5, 6, 8, 9]])
# 插入操作
a = np.array([[1,2],[3,4],[5,6]])
a
array([[1, 2],
[3, 4],
[5, 6]])
# 插入操作
np.insert(a,3,[7,8])
array([1, 2, 3, 7, 8, 4, 5, 6])
# 二维插入,插入行
np.insert(a,1,[[8,9]],axis=0)
array([[1, 2],
[8, 9],
[3, 4],
[5, 6]])
# 二维插入 插入列 会将每一个自动扩张成对应的行数
np.insert(a,1,[[1],[2],[3]],axis=1)
array([[1, 1, 2, 3, 2],
[3, 1, 2, 3, 4],
[5, 1, 2, 3, 6]])
a = np.arange(12).reshape(3,4)
a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
# 删除变成了一维
np.delete(a,5)
array([ 0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11])
# 删除第二列
np.delete(a,1,axis=1)
array([[ 0, 2, 3],
[ 4, 6, 7],
[ 8, 10, 11]])
# 删除第二行
np.delete(a,1,axis=0)
array([[ 0, 1, 2, 3],
[ 8, 9, 10, 11]])
# 删除多个
a = np.array([1,2,3,4,5,6,7,8,9,10])
np.delete(a,np.s_[3:6])
array([ 1, 2, 3, 7, 8, 9, 10])
去重
a = np.array([5,2,6,2,7,5,6,8,2,9])
a
array([5, 2, 6, 2, 7, 5, 6, 8, 2, 9])
#去重
np.unique(a)
array([2, 5, 6, 7, 8, 9])
# 返回去重的索引值
np.unique(a,return_index=True)
(array([2, 5, 6, 7, 8, 9]), array([1, 0, 2, 4, 7, 9], dtype=int64))
# 返回每一个结果都数量
np.unique(a,return_counts=True)
(array([2, 5, 6, 7, 8, 9]), array([3, 2, 2, 1, 1, 1], dtype=int64))
# 拼接一维的
np.char.add(['hello'],['world'])
array([‘helloworld’], dtype=’
# 拼接多维的
# 按照顺序依次拼接
np.char.add(['hello','hi'],['zs','ls'])
array([‘hellozs’, ‘hils’], dtype=’
# 重复生成
np.char.multiply("对不起",10)
array(‘对不起对不起对不起对不起对不起对不起对不起对不起对不起对不起’, dtype=’
# 字符串居中的操作
np.char.center('nihao',30)
array(’ nihao ‘, dtype=’
# 字符串的分割操作
np.char.split("www.bai.com",".")
array(list([‘www’, ‘bai’, ‘com’]), dtype=object)
# 换行分割
np.char.splitlines("i\nlove\nyou")
array(list([‘i’, ‘love’, ‘you’]), dtype=object)
# 去除开头和结尾的特定字符,中间的不会去除
np.char.strip(" l a o ")
array(‘l a o’, dtype=’
# 拼接字符串
np.char.join("/","laochen")
array(‘l/a/o/c/h/e/n’, dtype=’
# 替换
np.char.replace("lao cheng","cheng","gao")
array(‘lao gao’, dtype=’
# 存储度数的数组
a = np.array([0,30,35,60,90])
a
array([ 0, 30, 35, 60, 90])
# 根据度数转化为正弦值
np.sin(a*np.pi/180)
array([0. , 0.5 , 0.57357644, 0.8660254 , 1. ])
# 余弦值
np.cos(a*np.pi/180)
array([1.00000000e+00, 8.66025404e-01, 8.19152044e-01, 5.00000000e-01,
6.12323400e-17])
# 正切值
np.tan(a*np.pi/180)
array([0.00000000e+00, 5.77350269e-01, 7.00207538e-01, 1.73205081e+00,
1.63312394e+16])
# 舍入函数
# 四舍五入 俩个参数 第一个是数组 第二个是舍入的位数
a = np.array([1.0,5.55,2.678,4.123,9.53])
# 保留一个小数点
np.around(a,1)
array([1. , 5.6, 2.7, 4.1, 9.5])
# 向下取整 即只取整数
np.floor(a)
array([1., 5., 2., 4., 9.])
# 向上取整,整数向上取整还是自己
np.ceil(a)
array([ 1., 6., 3., 5., 10.])
a = np.array([[3,7,5],[8,4,3],[2,4,9]])
array([[3, 7, 5],
[8, 4, 3],
[2, 4, 9]])
# 获取行的最小值
np.amin(a,1)
array([3, 3, 2])
# 获取列的最小值
np.amin(a,0)
array([2, 4, 3])
# 获取行的最大值
np.amax(a,1)
array([7, 8, 9])
# 获取列的最大值
np.amax(a,0)
array([8, 7, 9])
# 最大值与最小值的差值 全部元素范围
np.ptp(a)
7
# 按轴计算 行
np.ptp(a,1)
array([4, 5, 7])
# 按轴计算 列
np.ptp(a,0)
array([6, 3, 6])
# 百分位数 一个元素在一个元素组里的百分位数
a = np.array([[10,7,4],[3,2,1]])
a
array([[10, 7, 4],
[ 3, 2, 1]])
# 中位数 50的意思的百分之50
np.percentile(a,50)
3.5
# 按照轴进行计算中位数
np.percentile(a,50,1)
array([7., 2.])
# 按照轴计算列的中位数
np.percentile(a,50,0)
array([6.5, 4.5, 2.5])
# 直接计算中位数的方法
np.median(a)
3.5
# 行
np.median(a,1)
array([7., 2.])
# 列
np.median(a,0)
array([6.5, 4.5, 2.5])
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
a
array([[1, 2, 3],
[3, 4, 5],
[4, 5, 6]])
# 算数平均值
np.mean(a)
3.6666666666666665
# 按轴计算 行
np.mean(a,1)
array([2., 4., 5.])
# 按轴计算 列
np.mean(a,0)
array([2.66666667, 3.66666667, 4.66666667])
# 标准差
np.std(a)
1.4907119849998598
# 方差
np.var(a)
2.2222222222222223
a = np.array([1,2,3,4,5])
a
array([1, 2, 3, 4, 5])
# 保存数据到文件
np.save("outfile.npy",a)
# 读取数据
np.load("outfile.npy")
array([1, 2, 3, 4, 5])
# 将多个数组保存到文件中
a = np.array([[1,2,3],[4,5,6]])
b = np.array([2,4,7])
c = np.arange(1,2,4)
np.savez("hi.npz",a,b,c)
# 读取
d = np.load("hi.npz")
d
d.files
[‘arr_0’, ‘arr_1’, ‘arr_2’]
d['arr_0']
array([[1, 2, 3],
[4, 5, 6]])
# 在存入的时候取名字
np.savez("hello.npz",a=a,b=b,c=c)
# 读取b的内容
np.load('hello.npz')['b']
array([2, 4, 7])
# 以文本的形式存放数据
a = np.array([1,2,3,4,5,6])
np.savetxt("out.txt",a)
# 读取
p = np.loadtxt("out.txt")
p
array([1., 2., 3., 4., 5., 6.])