一、ndarray——numpy中用于存储单一数据类型的数组对象(n-dimensional array object)
1、ndarray和python中的列表、元组的区别:
pyhton | numpy |
---|---|
不同数据类型 | 相同数据类型 |
运算速度较慢 | 运算速度非常快 |
需要手动编写 | 提供很多功能函数 |
2、ndarray是一个多维的数组对象,具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的优点。
3、ndarray的一个特点是同构:所有元素的数据类型必须相同
二、搜集数据
1、搜集数据的几种方式:
- 购买
- 爬虫
- 开源网站下载
2、搜集数据后:
- 数据读写
- 数据筛选
- 数据清洗
- 数据可视化
三、生成array数组对象的几种方式
1、从文件中获取
import numpy as np
data = np.loadtxt("BeijingPM2.5.csv",delimiter=",",skipper=1,dtype=float)
2、使用list列表/元组
#一维列表
a = [1,2,3,4,5,]
np1 = np.array(a)
print(np1)
#[1 2 3 4 5]
#一维元组
a = (1,2,3,4,5)
np1 = np.array(a)
print(np1)
#[1 2 3 4 5]
#二维
a = [[1,2],[4,5]]
np2 = np.array(a)
print(np2)
#[[1 2]
[4 5]]
3、生成全为1的数组对象
np1 = np.ones(10)
np2 = np.ones((10,5))
np3 = np.ones_like(np2)
4、生成全为0的数组对象
np1 = np.zeros(10)
np2 = np.zeros((10,5))
np3 = np.zeros_like(np2)
5、单位矩阵
np1 = np.eye(5)
#[1 0 0 0 0
# 0 1 0 0 0
# 0 0 1 0 0
# 0 0 0 1 0
# 0 0 0 0 1]
6、arange
np1 = np.arange(10)
#[0 1 2 3......7 8 9]
np2 = np.arange(10,50)
#[10 11 12 .....48 49]
np3 = np.arange(10,50,2)
#[10 12 14 .... 44 46 48]
四、ndarray数组的属性和数据类型
- dtype:数组中数据类型,如float64(更多类型见下边表格)
- shape:数组的类型,如(2,3)表示2行3列
- ndim: 数组的维度
- size:数组中元素个数
- itemsize:元素在内存中占字节数
- T:转置(人工智能一些算法中常用到)
五、数组运算
1、数组之间的运算
#同维度
a = [4,5,6]
b = [1,2,3]
print(a + b)
#[5 7 9]
print(a - b)
#[3 3 3]
print(a * b)
#[4 10 18]
print(a / b)
#[4 2.5 2]
#不同维度(数据广播)
a = [[4,5,6],[7,,8,9]]
b = [1,2,3]
print(a - b)
#[[3 3 3]
#[6 6 6 ]]
2、数组和标量之间的运算
a = [4,5,6]
print(a * 5)
#[20 25 30]
3、numpy进行数组运算
#加
data3 = np.add(data1,datat2)
#减
data4 = np.substract(data1,datat2)
#乘
data5 = np.multiply(datat1,datta2)
#除
data6 = np.divide(data1,datat2)
六、数据不完整——数据组合
1、上下组合
data1 = data[:10]
data2 = data[10:]
data3 = np.vstack((data1,data2))
data3 = np.row_stack((data1,data2))
2、左右组合
data6 = np.hstack((data4,data5))
data6 = np.column_stack((data4,data5))
七、数据截取
#获取连续的第3-5条数据
data1 = data[2:5]
data1 = data[[2,3,4]]
#获取非连续的第2、4、6条数据
data2 = data[[2,4,6]]
#获取第四行第五列数据
data3 = data[3][4]
data3 = data[3,4]
#获取前3行数据
data4 = data[0:3,:]
#获取前3行前3列数据
data5 = data[:3,:3]
#获取2-4行,3-5列数据
data6 = data[1:4,2:5]
八、重复——数据去重
1、按行去重
np.unique(data1,axis=0)
2、按列去重
np.unique(data2,axis=1)
九、冗余——数据删除
1、按行删除
#删除第1 2 3 行
data = np.delete(data,[0,1,2],axis=0)
2、按列删除
#删除第1 2 3 列
data = np.delete(data,[0,1,2],axis=1)
十、条件查找——切片
1、查找pm2.5>50的值
pm25 = data[:,-1]
print(pm25[pm25>50])
2、查找pm2.5>50的位置
#一维
data1 = np.where(pm25>50)
#二维
data2 = np.where(data>50)
3、将pm25<10的值替换为10
#<10的替换为10,不<10的保持pm25
data1 = np.where(pm25<10,10,pm25)
#不会修改原数据,另外生成一份数据
4、argwhere
data1 = np.argwhere(pm25>50)
#区别:返回格式不一样,尤其是二维的时候,argwhere返回坐标,更清晰
十一、改变数组维度
1、展平
- ravel :影响原始数据
- flatten :不影响原始数据
data1 = data.rqcel()
data2 = data.flatten()
2、转置
data1 = data.transpose()
3、改变数组格式
reshape :不影响原始数据
resize :影响原始数据
data1 = data.reshape((5,4))
#设置-1可以自动变化行和列,如下,这个时候会自动变为10行
data2 = data.reshape(-1,2)
data3 = data.resize((5,4))
十二、数据保存至文件
1、np.save(string,ndarray)
将数据保存在string.npy文件中,无压缩
np.save("data1",data1)
2、np.savez(string,ndarray1,ndarray2,ndarray3…)
将数据保存在string.npz文件中,有压缩
np.savez("data2",data2)
3、np.savetxt(string,ndarray,fmt,newline=’\n’)
数据保存在txt文件中
#数据共四列,每列之间逗号分开
np.savetxt("data3.txt,data2,fmt="%$f,%f,%f,%f"),newline='\n')