numpy常用的基本操作&创建数组
1.创建数组
-
0和1数组
- np.ones(shape)、np.zeros(shape)
-
等差序列
- np.linspace(start,stop,num=50) —生产等差数列 num是间距,默认50
- np.arange(start,stope,step,dtype)
- np.logspace(start,stop, num, endpoint, base, dtype)
-
创建随机数组
-
np.random模块
-
均匀分布
-
np.random.rand(10) —返回0~1之间的均匀分布的10个小数
- rand(shape)里面传的是形状,返回都是0-1之间的数
-
np.random.uniform(0,10) —返回0~10之间的一个小数
- np.random.uniform(1,3,(2,3))返回一个形状(2,3)的数组
-
np.random.randint(10) —返回0~10之间的一个整数
-
-
正态分布
- np.random.normal(均值,标准差,维度)
- np.random.standard_normal(size=(3,4))
-
-
-
用现有数据创建
-
np.array([[1,2,3],[4,5,6]]) —得到一个新数组
-
np.asarray(object) —得到的是object的索引
-
np.copy(object)
-
2.数组的索引
- 例子:三维数组a1,a1 = np.array([ [[1,2,3],[4,5,6]], [[12,3,34],[5,6,7]]])
- a1[0, 0, 1] 为2 , 修改a1[0,0] = 0
- 则a1变为array([ [[0,0,0],[4,5,6]], [[12,3,34],[5,6,7]] ])
3.数组形状与类型变化
-
ndarray.reshape([x,y])
- 修改原数组形状,如果给定的数组数据和需要reshape的形状不符合时,将会报错
-
ndarray.resize([x,y])
- 返回新数组,如果新数组比原数组大,则将会copy原数组中的值对新数组进行填充
-
ndarray.flatten() —默认按行降维,,加上“F”,按列降维
-
修改类型
- ndarray.astype(np.int32)
- ndarray.round(3) —修改小数位数
4.数组转换
-
ndarray.T 数组转置
-
ndarray.tostring()\tobytes()
-
ndarray.copy()
- temp = stock_day_rise[:4, :4].copy() —截取部分数据进行copy
5.逻辑运算
-
np.all()
- np.all(data[0:2,0:5] > 0) —判断data[0:2,0:5]是否全是>0的
-
np.unique() —返回新数组,去重
-
np.where(temp > 0, 1, 0)
-
np.where(np.logical_and(temp > 0.5, temp < 1), 1, 0)
判断 大于0.5并且小于1的,换为1,否则为0
-
np.where(np.logical_or(temp > 0.5, temp < -0.5), 1, 0)
判断 大于0.5或者小于-0.5的,换为1,否则为0
-
6.统计运算
- np.min\max\mean\std\argmax\argmin
- np.argmax、np.argmin —完成最大值最小值的索引
- 分位数
- np.percentile(a,50) —中位数就是50%处的数字
7.数组间运算
- 广播机制
- Broadcast机制的功能是为了方便不同形状的array(numpy库的核心数据结构)进行数学运算
-
对应位置维度数相等,或者有一方为1
- 维度相等
- shape(其中相对应的一个地方为1)
- 矩阵必须是2维的,矩阵乘法需要满足
- (m,n)*(n,l) = (m,l)
- np.matmul(矩阵a,矩阵b)
8.合并、分割
- 合并
- np.concatenate([a,b],axis=0)
- np.hstack([a,b]) —横向
- np.vstack([a,b]) —纵向
- 分割
- np.split(a, 4, axis=0)
10.属性&类型
- 属性:shape、flags、ndim(数组维数)、size(数组中元素数量)、itemsize(一个元素的长度)、nbytes
- 类型:np.bool、np.int8、np.uint8…
11.运算快的原因
- 数组内存块风格
- 创建array的默认方式是 “C-type” 以 row 为主在内存中排列
- 并行化运算(也叫向量化运算)
- numpy底层使用BLAS做向量,矩阵运算
12.一些方法的使用技巧
- np.squeeze()
- 从数组的形状中删除单维度条目,即把shape中为1的维度去掉
- np.eye()
- 可以用于生成one-hot矩阵