文章目录
一、数组简介
初始化
arr = np.array([1,2,3],[4,5,6])
索引
arr[1][2]
arr[1,2]
arr[1,-1] #第二行 最后一列
arr[np.arrange(0,2),[0,1]] #取出a[0,1] a[1,1] 返回一个列表 可以用数组作为索引,返回多个值
arr[arr>2]
#用布尔值返回
bool_index = arr>2 #右侧返回一个bool数组
arr[bool_index]
切片
左闭右开。
#一维子数组
arr_1 = [1,2,3,4,5,6]
arr_1[:3] #前三个元素
arr_1[3:] #从索引3开始
arr_1[::2] #步长为2
arr_1[::-1] #逆序
#二维子数组 可以对行或列整体赋值
arr[:1,:2] #一行两列
arr[::1,::2] #一行 一隔一列
arr[::-1,::-1] #逆序
#获取数组的行和列
arr[:,0] #第一列
arr[0,:] #第一行
副本
在python列表中,切片是值的副本。在Numpy中,切片是值的视图(同时修改)。
arr.copy()
属性(3+1)
内置属性,不是方法,不加括号。
维度
arr.ndim #一维、二维、三维
arr.shape #每个维度的大小
元素总数量
arr.size
数据类型
arr.dtype
修改数据类型
arr.astype(np.float)
种子
设置一组种子值,确保每次程序执行时都可以生成同样的随机数组
np.random.seed(0)
创建(9种)
# dtype
a = np.zeros((2,3)) #全是0
a = np.ones((2,3)) #全是1
a = np.full((2,3),8) #全是8
a = np.random.random((2,3)) #随机数(0,1)之间
a = np.random.normal(0,1,(2,3)) #均值为0,标准差为1的正态分布
a = np.random.randint(0,10,(2,3)) #[0,10)之间的随机整数
a = np.empty((2,3)) #数据是计算机内存原来的数值,创建随机初始化数组
a = np.arrange(0,20,2) #起始,终止,步长 类似range 线性序列
a = np.eye(3) #单位矩阵
二、通用函数
什么是通用函数:该函数能对每一个值进行操作。
数组的运算
arr+2 np.add(arr,2)
arr-2 np.substract(arr,2)
arr/2 np.divide(arr,2)
arr*2 np.multiple(arr,2)
arr//2 np.floor_divide(arr,2)
arr**2 np.power(arr,2)
arr%2 np.mod(arr,2)
绝对值
np.abs(arr)
三角函数
np.sin/cos/tan/arcsin/arccos/arctan(arr)
指数和对数
指数
np.exp(arr) #e^x
np.exp2(arr) #2^x
np.power(3,x) #3^x
对数
np.log(arr) #ln(x)
np.log2(arr) #log2(x)
数组间的运算
arr_2 = np.arr[[7,8,9],[10,11,12]]
arr*arr_2 #内积 对应相乘 +-/同理 shape一致
arr.dot(arr_2.T) #矩阵乘法
np.dot(arr,arr_2.T)
np.matmul(arr,arr_2.T)
arr.T #矩阵转置
高级的通用函数特性
指定输出
y = np.empty((2,3))
np.multiple(arr,arr_2,out=y) #基本算符都可以
不同于y = arr + arr_2
out参数是直接写入,而前者是生成临时数组再复制到y中
聚合
直接在对象上进行运算。
np.add.reduce(arr) #返回所有元素的和
np.add.accumulate(arr) #返回所有元素的和的中间过程
三、聚合函数
什么是聚合函数:该函数能对一组值进行操作,输出一个值。
10个
np.sum(arr) #和
arr.sum()
np.prod(arr) #积
np.mean(arr) #平均值
np.std(arr) #标准值
np.var(arr) #方差
np.min(arr) #最小值
np.max(arr) #最大值
np.argmin(arr) #找出最小值的索引
np.argmax(arr) #找出最大值的索引
np.median(arr) #中位数
默认情况下,返回整个数组的结果。
axis=0 返回每一行的结果 一维数组形式
axis=1 返回每一列的结果
安全模式 在方法前加nan,忽略缺失值。
四、矩阵运算
广播
另一种向量化操作。
不同大小的数组的二元通用函数的一组规则。
规则
1.如果两个数的维度数不相同,那么小维度的数组的形状将会在最左边补1;
2.如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度为1的维度扩展以匹配另外一个数组的形状;
3.如果两个数组的形状在任何一个维度上都不匹配并且没有任何一个维度等于1,那么会引发异常。
#示例 规则1 + 规则2
M = np.zeros((2,3))
a = np.arrange(3)
M+a #a先扩展为(1,3),接着扩展为(2,3)
变形
arr.reshape((3,2)) #顺序排列,依次取值
#在某一维度写上-1,numpy自动帮我们计算出正确的维度。
连接
np.concatenate([arr,arr_1],axis=0/1)
np.vstack(arr,arr_1) #垂直
np.hstack(arr,arr_1) #水平
np.r_[arr,arr_1] #按行堆叠
np.c_[arr,arr_1] #按列堆叠
贴瓷砖
np.tile([0,1],(2,3))
[[0,1,0,1,0,1]
[0,1,0,1,0,1]]
逆矩阵
np.linalg.inv()
维度变化
np.expend_dims() #升维
np.squeeze() #降维
五、布尔
运算符
运算符 | 通用函数 |
---|---|
== | np.equal |
!= | np.not_equal |
< | np.less |
<= | np.less_equal |
> | np.greater |
>= | np.greater_equal |
布尔操作
统计记录个数
#统计布尔数组中True记录的个数
np.count_nonzero(arr>2)
np.sum(arr>2) #False记为0,True记为1
#有没有值大于2?
np.any(arr>2)
#是不是所有值都大于2?
np.all(x>2)
以上都可用于特定的坐标轴。
布尔运算符
运算符 | 通用函数 |
---|---|
& | np.bitwise_and |
| | np.bitwise_or |
^ | np.bitwise_xor |
~ | np.bitwise_not |
#大于2,小于3的数量
np.sum((arr>2)&(arr<3))
六、numpy文件的输入输出
np.save('test',arr) #默认npy
arr = np.load('test.npy')
```