简介
1.numpy优势
开源科学计算库,用于快速处理多个维度的数组,使用简洁高效,使用ndarray对象处理多维数组,该对象是一个快速灵活的大数据容器。其运算速度快是基于内存块存储风格,并行化运算,底层语言
由C语言编写,不受python解释器的限制,解除了GIL。
2.ndarry属性
名字 | 解释 |
---|---|
ndarry.shape | 数组维度元组 |
ndarry.ndim | 数组维度 |
ndarry.size | 数组中元素数量 |
ndarry.itemsize | 数组元素长度(字节) |
ndarry.dtype | 数组元素类型 |
a=np.array(
[
[
[1,2,3],[3,4,5]
],
[
[1,2,3],[4,5,6]
]
])
a.shape
输出为(2,2,3),几个维度几个数字,由嵌套情况得到shape
a=np.array([1,5,6],dtype="float32")
a.dtype
输入为dtype('float32'),此为指定数据类型的方式,不指定
的话,整形默认为int64,浮点为float64
3.基本操作
包括ndarray.方法()和np.函数名()两种方式
3.1生成数组的方法
- 生成0和1
np.zeros(shape)
np.ones(shape)
例如
np.zeros(shape=(3,4))
输出为array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
np.ones(shape=(2,4),dtype="float32")
输出为array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]], dtype=float32)
- 从现有数组中生成
np.array()和np.copy 深拷贝,会跟随元数组变化
np.asarray() 浅拷贝,不会跟随原数组变化 - 生成固定范围数组
np.linspace(0,10,100)
[0,10]之间等距100个数
np.arange(a,b,c)
类似range(a,b,c),[a,b]之间,c个步长 - 生成随机数组
np.random模块
1.均匀分布
np.random.uniform(low,high,size)
例如
data1=np.random.uniform(low=-1,high=1,size=1000000)
plt.figure(figsize=(20,8),dpi=80)
plt.hist(data1,1000) #数据 组数
plt.show()
2.正态分布
两个参数μ和σ,代表数据的平均值和标准差
np.random.normal(loc=0.0,scale=1.0,size=None)
data2=np.random.normal(loc=1.75,scale=0.1,size=1000000)
plt.figure(figsize=(20,8),dpi=80)
plt.hist(data2,1000)
plt.show()
3.2案例(数组的切片索引)
随机生成8支股票2周的交易日数据
data3=np.random.normal(loc=0,scale=1,size=(8,10))
#获取第一个股票前3个交易日的数据 索引
data3[0,0:3]
#行列反转 形状修改
#data3.reshape(10,8) #只是重新分割,返回新的数组,不改变原始数组
#data3.resize(10,8) #无返回值,对原始的数据更改,重新分割
data3.T #数组转置
3.2数组类型修改
ndarray.astype(type) 如ndarray.astype(“int32”);
ndarray序列化到本地
ndarray.tostring()
3.2数组去重
temp=np.array(
[
[1,2,3,4],
[3,4,5,6]
])
np.unique(temp)
输出为array([1, 2, 3, 4, 5, 6])
4.ndarray运算
4.1逻辑运算
data4=np.random.normal(loc=1.75,scale=0.1,size=1000000)
#逻辑判断,涨跌幅大于0.5标记为True,否则为False
data4>0.5
#布尔索引
data4[data4>0.5]
4.2通用判断函数
np.all(bool)
有一个False则返回False,都是True返回True
np.any()
有一个True则返回True,都是False返回False
4.3三元运算符
np.where(bool,True位置的值,False位置的值)
根据bool将数组化为布尔数组,再根据后两个参数将数组变为相应的值。
复合逻辑运算:
np.logical_and()和np.logical_or()
例如 np.logical_and(temp>0.5,temp<1)
np.logical_or(temp<-0.5,temp>0.5)
将temp<-0.5和temp>0.5之间的数置为1,其余为0
np.where(np.logical_or(temp<-0.5,temp>0.5),1,0)
4.4统计运算
- 统计指标函数
np.min(),np.max(),np.mean(),np.median(),np.var(),np.std()
temp=np.array(
[
[1,2,3,4],
[3,4,5,6],
[5,7,1,4],
[2,8,5,3]
])
#按列求最大值
temp.max(axis=0)
#按行求最大值
np.max(temp,axis=1)
返回最大值,最小值的索引
np.argmax(temp,axis=)
np.argmin(temp,axis=)
5.数组间运算
5.1数组与数运算
temp=np.array(
[
[1,2,3,4],
[3,4,5,6],
[5,7,1,4],
[2,8,5,3]
])
#数组中每一个数加一
temp+1
5.2数组与数组运算
需要满足广播机制,只有满足以下两种情况才可进行数组间运算
- 维度相等
- shape(其中相对应的地方为1)
例如
反例
程序
6.矩阵运算
6.1矩阵–二维数组
存储方法
- ndarray数组
- matrix数据结构
temp3=np.array(
[
[1,2],
[3,4],
[5,7],
[2,8]
])
temp4=np.mat(
[
[1,2],
[3,4],
[5,7],
[2,8]
])
6.2矩阵乘法
形状:(m,n)*(n,l)=(m,l)
ndarray存储相乘的方法:
- np.matmul()
- np.dot()
matrix存储相乘 - matrix1*matrix2
#ndarray存储
temp3=np.array(
[
[1,2],
[3,4],
[5,7],
[2,8]
])
temp4=np.array(
[
[1,2,3,4],
[3,4,3,2],
])
np.matmul(temp3,temp4)
np.dot(temp3,temp4)
#matrix相乘
matrix1=np.mat(temp3)
matrix2=np.mat(
[ [1,2,3,4],
[3,4,3,2],])
matrix1*matrix2
7.合并与分割
7.1合并
- np.hstack(a1,a2) colum拼接
- np.vstack(a1,a2) row拼接
- np.concatenate((a1,a2,…),axis=0) //竖直拼接 列
- np.concatenate((a1,a2,…),axis=1) //水平拼接 行
7.2分割
- np.split()
8.IO操作与数据处理
8.1 读取文件
不适合读取,不支持字符串读取,一般用PANDAS
- test=np.genfromtxt(“test.csv”,delimiter=’,’) 路径名 分隔符