1 数组的索引和切片
1.1 一维数组索引和切片
import numpy as np
data1 = np.arange(1,10,2)
data1
data1[1]
data1[0:3]
data1[::2]
data1[-1]
1.2 多维数组
2 布尔索引
3 值的替换
4 广播机制
5 形状操作
5.1 数组叠加
hstack:代表水平方向叠加,要想叠加成功,行必须一致 vstack:代表垂直方向叠加,要想叠加成功,列必须一致 concatenate:手动指定叠加方向,axis=0 表示垂直方向叠加,axis=1表示水平方向叠加,axis=None表示叠加为一维数组。
import numpy as np
h1 = np.random.randint(0,10,size=(3,1))
h1
'''array([[4],
[8],
[2]])'''
h2 = np.random.randint(0,10,size=(3,4))
h2
'''array([[6, 9, 5, 0],
[6, 1, 9, 4],
[8, 8, 9, 8]])'''
h4 = np.random.randint(0,10,size=(1,4))
h4
'''array([[2, 3, 5, 5]])'''
h3 = np.hstack([h1,h2])
h3
'''array([[4, 6, 9, 5, 0],
[8, 6, 1, 9, 4],
[2, 8, 8, 9, 8]])'''
np.concatenate([h1,h2],axis=1)
'''array([[4, 6, 9, 5, 0],
[8, 6, 1, 9, 4],
[2, 8, 8, 9, 8]])'''
np.concatenate([h1,h2],axis=None)
'''
array([4, 8, 2, 6, 9, 5, 0, 6, 1, 9, 4, 8, 8, 9, 8])
'''
np.concatenate([h2,h3],axis=0)
'''array([[6, 9, 5, 0],
[6, 1, 9, 4],
[8, 8, 9, 8],
[2, 3, 5, 5]])'''
5.2 数组分割
hsplit:水平方向分割。 vsplit:垂直方向分割。 split/array_split: 自定义分割,axis=1 水平分割,axis=0 垂直方向分割。
h5 = np.random.randint(0,100,size=(6,4))
h5
'''array([[13, 7, 29, 65],
[57, 50, 79, 12],
[ 9, 16, 82, 86],
[97, 62, 43, 92],
[66, 21, 78, 34],
[95, 33, 51, 63]])'''
np.hsplit(h5,2)
'''[array([[13, 7],
[57, 50],
[ 9, 16],
[97, 62],
[66, 21],
[95, 33]]),
array([[29, 65],
[79, 12],
[82, 86],
[43, 92],
[78, 34],
[51, 63]])]'''
np.hsplit(h5,[1,3])
'''[array([[13],
[57],
[ 9],
[97],
[66],
[95]]),
array([[ 7, 29],
[50, 79],
[16, 82],
[62, 43],
[21, 78],
[33, 51]]),
array([[65],
[12],
[86],
[92],
[34],
[63]])]
'''
np.vsplit(h5,3)
'''
[array([[13, 7, 29, 65],
[57, 50, 79, 12]]),
array([[ 9, 16, 82, 86],
[97, 62, 43, 92]]),
array([[66, 21, 78, 34],
[95, 33, 51, 63]])]
'''
np.vsplit(h5,[1,2])
'''
[array([[13, 7, 29, 65]]),
array([[57, 50, 79, 12]]),
array([[ 9, 16, 82, 86],
[97, 62, 43, 92],
[66, 21, 78, 34],
[95, 33, 51, 63]])]
'''
np.split(h5,2,axis=1)
'''
[array([[13, 7],
[57, 50],
[ 9, 16],
[97, 62],
[66, 21],
[95, 33]]),
array([[29, 65],
[79, 12],
[82, 86],
[43, 92],
[78, 34],
[51, 63]])]
'''
np.split(h5,3,axis=0)
'''
[array([[13, 7, 29, 65],
[57, 50, 79, 12]]),
array([[ 9, 16, 82, 86],
[97, 62, 43, 92]]),
array([[66, 21, 78, 34],
[95, 33, 51, 63]])]
'''
5.3 转置和轴对换
.T: T属性可对数组进行转置 .transpose:返回一个View(浅拷贝),修改返回值,会影响到原来的数组
h6 = np.random.randint(0,100,size=(3,1))
h6
'''
array([[52],
[17],
[80]])
'''
h6.T
'''
array([[52, 17, 80]])
'''
h7 = h6.transpose()
h7
'''
array([[52, 17, 80]])
'''
h7[0,0]=100
h6
'''
array([[100],
[ 17],
[ 80]])
'''
5.4 矩阵乘法(线代乘法)
h6.dot(h6.T)
'''
array([[10000, 1700, 8000],
[ 1700, 289, 1360],
[ 8000, 1360, 6400]])
'''
6 浅拷贝和深拷贝
6.1 View/浅拷贝
对变量进行拷贝,但是它们指向的内存空间都是相同的。 下图示意
6.2 深拷贝
对变量进行拷贝,但是它们指向的内存空间都是不相同的。
7 文件操作
7.1 文件保存
np.savetxt(frame,array,fmt=’%.18e’,delimiter=None) frame:文件、字符串或产生器,可以是.gz或.bz2文件 array:存入文件的数组 fmt:写入文件格式. delimiter:分割字符串,默认是空格
7.2 加载数据
loadtxt(fname, dtype=<class ‘float’>, comments=’#’, delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding=‘bytes’, max_rows=None) fname:解析文件名,一般为csv文件 dtype:数据类型转换 comments:最开始处的注释标识 delimiter:分隔符解析 skiprows:跳过多少行
7.3 save和load可以保存和加载多维数组
np.save(fname,array):npy后缀名文件,可不设置header np.savez(fname,array):npz后缀名文件,压缩格式,可不设置header np.load(fname):
8 NAN和INF值处理
8.1 简介
NAN:not a number。不是一个数字的意思,但它属于浮点类型,想要进行数据操作请注意它的类型。 特点:NAN和NAN是不相等的,NAN和任何值做运算,值都为NAN。 很多时候文件中存在缺失值,读取默认用NAN代替 inf:Infinity,代表无穷大,属于浮点类型,np.inf代表正无穷大,-np.inf代表负无穷大。2/0
8.2 删除缺失值
8.3 替换缺失值
10 random模块
11 axis轴
12 通用函数
12.1 一元函数
12.2 二元函数
12.3 聚合函数
12.4 布尔判断
12.5 排序
12.6 其他函数
|