学习笔记(1)
numpy
多维数组结构,无须循环对整组数据进进行快速运算。
引用方法: import numpy as py
1、元素类型
布尔类型:bool_
整型:int_ int8 int16 int32 int64
无符号整型:uint8 uint16 uint32 uint64
浮点型:float_ float16 float32 float64
复数型:complex_ complex64 complex123
2、创建方法
np.array(列表):将列表转化为一个numpy数组
np.array([1,2,3])
np.array([0] * 10)
mp.array(range(10))
np.zeros(10,dtype='int64'):创建一个长度为10,各元素为0,类型为int64的数组
np.ones(10):创建一个长度为10,各元素为1,类型为float64(默认)的数组
np.empty(100):创建一个长度为100,各元素为随机数,类型为float64(默认)的数组
np.arange(a,b,c):创建一个从a到b(包a不包b),步长为c的数组,c可以是小数,默认c为1
np.linspace(a,b,c):创建一个从a到b(包a也包b),平均分为c个数(元素个数为c个)
np.eye(10):创建一个10×10的单位矩阵
运算规则
数组与标量:a+1 3*a 1//a a**0.5 a>5
数组和数组:a+b a/b a*b a%b a==b
a.reshape((a,b,c)):将数组a变为a×b×c的矩阵
a.shape:返回数组的形状
a.ndim(获取维度)
a.shape(各维度长度)
a.dtype(数据类型)
a.T(矩阵转置)
a.astype(转换数据类型)
a.swapaxes(0,1)(交换维度,不改变a)
索引与切片
a[0][0](数组第一个元素的序号为0)
a[0,0]:与a[0][0]相同
a[b:c]:从b到c(包b不包c),b和c可以省略
#切片只是指代,例如:
a = np.arange(10)
c = a[:4]
c[0] = 20
print(a)
输出:
[20 1 2 3 4 5 6 7 8 9]
若想要复制,则用到深拷贝c = a[:4].copy(),此时改变c不会改变a
a[0:2,0:2]:二维切片(不能用a[0:2][0:2])
3、布尔型索引
a[a>5]:返回一个由a中大于5的元素组成的列表,例如:
a = np.array([8,5,2,3,6,9,4,5,1,5,6,8])
print(a[a>5])
输出:
[8 6 9 6 8]
a[(a>5) & (a%2==0)]:多条件布尔索引(& |)
4、花式索引
例子
a = np.array(np.random.randint(0,10,10))
print('a = ',a)
print('a[[1,3,4,6,7]] = ',a[[1,3,4,6,7]])
输出:
a = [4 0 5 0 5 6 4 8 9 1]
a[[1,3,4,6,7]] = [0 0 5 4 8]
二维花式索引
例子1
b = np.arange(20).reshape(4,5)
print(b)
输出
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
例子2
b[[1,3],[1,3]]
b[[1,3],:][:,[1,3]]
输出
array([ 6, 18])
array([[ 6, 8],
[16, 18]])
5、通用函数:调用方式:np.xxx
一元函数 | 作用 |
abs | 求绝对值 |
sqrt | 开方 |
exp | e的x次方 |
log(log2/log10) | 求对数 |
cell | 向大取整 |
floor | 向小取整 |
round | 四舍六入五成双 |
trunc | 去掉小数部分 |
rint | 与round相同 |
modf | 返回两个数组,分别为整数部分和小数部分 |
isnan | nan处返回True,其他返回False |
cos/sin/tan | 三角函数 |
sort | 从小到大排序 |
unique | 排除重复元素,并sort |
二元函数 | 作用 |
add | 将两个数组相加 |
substract | 相减 |
multiply | 相乘 |
divide | 相除 |
power | 次方 |
mod | 求余 |
maximum | 求大值 |
minimum | 求小值 |
floor_divide | 求商 |
dot | 矩阵内积 |
例子1
b = np.array([np.nan,.1,.1,.1,.1])
print(np.isnan(b))
print(b[~(np.isnan(b))])
输出
[ True False False False False]
[0.1 0.1 0.1 0.1]
例子2
a = np.array([3,4,5,6,7])
b = np.array([2,5,3,7,4])
print(np.maximum(a,b))
输出
[3 5 5 7 7]
6、统计方法:调用方法:ndarray.xxx()
统计函数 | 作用 |
sum | 求和 |
mean | 求平均值 |
std | 求标准差 |
var | 求方差 |
min | 求最小值 |
max | 求最大值 |
argmin | 求最小值的索引 |
argmax | 求最大值的索引 |
7、随机数生成
随机数函数 | 作用 |
np.random.randint(0,10,20) | 创建一个长度为20的数组,每个元素为0到10之间的随机整数 (包0包10) |
np.random.randint(0,10,(3,5,4)) | 创建一个3×5×4的数组,每个元素为0到10之间的随机整数 |
np.random.rand(10) | 创建一个长度为10的数组,每个元素为0到1之间的随机浮点数 |
np.shuffle(list/array) | 将列表/数组打乱 |
np.choice(list/array,10) | 创建一个长度为10的数组,每个元素从列表/数组中随机抽选 |
np.random.uniform(4,5,10) | 创建一个长度为10的数组,每个元素为4到5之间的随机浮点数 |