什么是numpy??
NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
1、一个强大的N维数组对象 ndarray
2、广播功能函数
3、整合 C/C++/Fortran 代码的工具
4、线性代数、傅里叶变换、随机数生成等功能
第一步,安装numpy
使用的是 pip install numpy
直接在Terminal里输入就可以:
但是,软件自带的镜像下载的很慢很慢,只有十几kb,所以需要更改源文件为阿里源
。
pip config set global.trusted-host mirrors.aliyun.com
其他两个类似,就不举例了,注意不用加等号和 引号
numpy的使用
首先要先引入包
import numpy as np
1、创建 adarray
直接创建:
a1 = np.array([1,2,3])
a2 = np.array([[1,2,3],[4,5,6]])
a3 = np.array([[[1, 2, 3], [4, 5, 6]],
[[7, 8, 9], [10, 11, 12]]])
经常使用的是产生随机数的方式创建ndarray
a4 = np.random.random((3, 3))
print(a4)
[[0.57535872 0.85528972 0.57819323]
[0.40186922 0.69973411 0.92463808]
[0.14921975 0.00433273 0.57461482]]
最常用的创建ndarray的方式
a = np.arange(24).reshape((2,3,4))
2、ndarry 常用属性,使用a.+属性 格式使用
shape :ndarray 的形状,(维度1的长度,维度2的长度,维度3的长度,。。)
size: ndarray 的元素的个数 维度1的长度维度2的长度维度3的长度
ndim:维度大小
指定ndarray 的大小,创建元素全部为 1 或者为 0
ones 和 zeros
print(np.ones((2, 4, 5)))
[[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]
print(np.zeros((2, 4, 2)))
[[[0. 0.]
[0. 0.]
[0. 0.]
[0. 0.]]
3、ndarray 切片
ndarray 的切片,只是原来的ndarray 的视图并不会创建新的ndarray
这两句代码很重要
print(a[:,1])
#取出第一个维度所有 , 第二个维度的第二个
print(a[:, 0:2, 0:2])
#(0:2) 指的是0,1,不包括2
4、垂直合并 和 水平合并
vertical:垂直
horizontal:水平
垂直合并arange,合并之后,维度和元素维度一致
a1 = np.arange(12).reshape(3,4)
a2 = np.arange(12).reshape(3,4)
print(np.vstack((a1, a2)))
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
水平合并,合并之后,维度和元素维度一致
三行四列变成六行四列
print(np.hstack((a1, a2)))
[[ 0 1 2 3 0 1 2 3]
[ 4 5 6 7 4 5 6 7]
[ 8 9 10 11 8 9 10 11]]
5、水平切割和垂直切割
水平切割 “刀” 是 垂直切的:
a1 = np.arange(12).reshape(3,4)
[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
print(np.hsplit(a1, 4)) 拆分数组,第二个参数是一个整数,表示拆分之后子数组的个数,子数组按维度1平均拆分子数组
[array([[0],
[4],
[8]]), array([[1],
[5],
[9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
垂直切割 “刀” 是 水平切的:
print(np.vsplit(a1, 3))
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
算术运算-----广播
算术运算 (加减乘除,求模,幂运算)两个相同大小的ndarray 进行数学运算,对应位置上的元素进行数学运算
如果大小不一样,会对小的数组进行广播,把小的数组变为大的数组一样大
广播规则
如果大小不一样,会对小的数组进行广播,把小的数组变为大的数组一样大
1、先对比两个数组的维度的个数是否一致,不一致的话,把维度小的数组,在左边补1,把维度补成一样的
a1 = np.arange(48).reshape((8,1,6,1))
a2 = np.arange(35).reshape((7,1,5))
广播步骤:把a2 的 7,1,5 补齐为 1,7,1,5
2、 把两个数组中,长度为1的维度,复制为长度一样
如果长度不为1,并且维度不同,那么两个数组不能进行广播,也就不能进行数学运算
ndarray 统计运算
np.sum(a2) #对所有求和
np.sum(a2,axis=2) #对指定维度求和