【Python学习笔记】numpy初学笔记
2019-08-01 本文已影响0人
清梦载星河
1. Numpy数组的创建
import numpy as np
# 1.1 np.array() 创建ndarray最基本的方法
arr1 = np.array([0,1,2,3,4])
# 1.2 创建一个长度为10的数组,数组的值全为0
arr2 = np.zeros(10,dtype=int)
# 1.3 创建一个3 * 5的浮点型数组,数组的值都是1
arr3 = np.ones((3,5),dtype=float)
# 1.4 创建一个3 * 5的浮点型数组,数组的值都是3.14
arr4 = np.full((3,5),3.14)
# 1.5 创建一个线性序列数组,从0开始,到20结束,步长为2
arr5 = np.arange(0,20,2)
# 1.6 创建一个5个元素的数组,这5个数均匀地分配到0~1
arr6 = np.linspace(0,1,5)
# 1.7 创建一个3 * 3的单位矩阵
arr7 = np.eye(3)
# 1.8 创建一个由3个整型数组组成的未初始化的数组,数组的值是内存空间的任意值
arr8 = np.empty(3)
2. Numpy数组的属性
- ndim : 数组的维度
- shape : 数组每个维度的大小
- size : 数组的总大小
- dtype : 数组的数据类型(常用)
- itemsize : 每个数组元素字节大小
- nbytes : 数组总字节大小
3. Numpy的通用函数
3.1 数组变形
- .T : 转置
- reshape()
- resize()
示例代码:
import numpy as np
arr1 = np.arange(10)
# 变形为一个 5 * 2的二维数组,参数为待操作数组和一个元组
print(np.reshape(arr1,(5,2)))
# 当转换前后元素数目不同,resize()可强制转换
print(np.resize(arr1,(2,6)))
reshape()会改变原数组,而resize()生成一个新数组,不会改变原数组。
3.2 数组的复制
使用赋值符为浅复制,使用array.copy()为深复制。
ndarray自带.copy(),无需import copy
3.3 数组类型转换
- .astype()
示例代码:
arr1 = np.arange(10,dtype='int32')
arr2 = arr1.astype(np.int64)
3.4 数组堆叠(拼接)
作用:将多个数组合并为一个
- np.concatenate() 。参数为数组元祖或数组列表;也可用于二维数组,此时可设置axis参数,默认axis=0,沿垂直方向拼接,axis=1为水平拼接。
- np.vstack() 。参数为数组元祖或数组列表,垂直拼接。
- np.hstack() 。参数为数组元组或数组列表,水平拼接。
示例代码:
x = np.array([1,2,3])
y = np.array([4,5,6])
print(np.concatenate([x,y]))
# Console:
# array([1,2,3,4,5,6])
3.5 数组拆分
作用:将一个数组拆分为多个数组
- np.split() 。
- np.hsplit() 。水平分割。
- np.vsplit() 。垂直分割。
- 参数为一个索引列表,索引列表记录的是分裂点位置,N个分裂点会得到 N + 1 个子数组。
3.6 简单运算
Numpy数组使用向量化操作,使得Numpy数组的计算有时会非常快。
- +、-、 *、/ :加减乘除等
- arr.mean() : 求平均值
- arr.sum() : 求和
- arr.min() : 求最小值
- arr.max() : 求最大值
- arr.std() : 求标准差
- arr.var() : 求方差
- arr.prob() : 求累积
- arr.abs() : 求中位数
4. Numpy数组的索引及切片及切片
类似标准Python中列表的索引。
示例代码:
x = np.arange(10)
y = np.arange(10).reshape((2,5))
4.1 基本索引及切片
# 打印最后一个元素
print(x[-1])
# 打印第二个到第六个元素(左闭右开)
print(x[1:6])
4.2 二维数组索引
# 打印第一行第一个元素
print(y[0,0])
4.3 布尔型索引及切片
- 比较运算符:大于、小于、等于……
- 布尔运算符:& 、| 、^ 、~
- 补充:np.any() 和 np.all()
# 有没有值大于8?返回True或者False
np.any(x > 8)
# 是不是所有值都小于10?返回True或者False
np.all(x < 10)
4.4 利用索引数组进行索引
示例代码:
x = np.arange(12).reshape((3,4))
y = np.arange(12)
# 打印y数组索引3、7、2的元素
print(y[3],y[7],y[2])
or
ind = [3,7,2]
print(y[ind])
# 二维数组中的数组索引
row = np.array([0,1,2])
col = np.array([2,1,3])
print(x[row,col])
5. Numpy中的随机数
- np.random.rand() # 值区间为0~1
- np.random.randint()
- np.random.narmal() # 均值为0,标准差为1的正态分布
6. Numpy数据的输入输出
存储数组数据:.npy文件
np.save(FILENAME,ARRAY)
读取:
np.load(FILENAME)
存储成txt文件:
np.savetxt(FILENAME,ARRAY,delimeter='分隔符')
np.loadtxt(...)