Loading

numpy模块

  • 导入
import numpy as np

数组的优势在于其可以进行批量操作,而无需借助for循环

应该充分利用这个特性,同时应该避免去遍历数组,这也是十分低效的行为

与pandas不同的是,其在每个轴方向都没有表头,只能使用数字索引

同时pandas也有更多的操作函数

  • 属性
data.shape
# 返回元组,分别指的行数和列数
data.dtype
# 返回数组中元素的类型
  • 创建
data = [[1,2,3],[1,2,3]]
arr = np.array(data)
# 返回了一个2行3列的array
# 其实不需要是列表,只要其是序列就可以
# 多维数组可以使用嵌套序列
# 可以传入dtype参数控制类型
np.zeros(10) # 返回一个一维的10元素的0数组 np.zeros((3,6)) # 在其内部传入元组实际上就是传入了shape

通过指定的序列函数

np.arange(15)
# 其实range()函数的数组版
# 返回一个0到14,步长为1的一维数组
# 实际上就是range(14)的列表更换为数组

创建的是一个多维数组对象,即ndarray

其是一个通用的多维同类数据容器

创建完成后可以使用reshape()函数来控制形状

arr = np.arange(32).reshape((8,4))
# 首先生成一个0到31的一维array
# 然后reshape,使其变为一个二维array,shape为(8,4)

同时也可以使用转置等方法来置换轴

arr.T
# 对arr进行转置
# 可以注意到其只能对二维数组进行操作
arr.transponse((1,0,2))
# 此方法可以对更高维度的数组进行操作
# 将原来为0轴的数据替换到1轴等等
# 置换轴带来的后果就是索引的方法发生了变化
# 比如之前使用(3,2,4)索引的元素就需要使用(2,3,4)才能索引到
arr.swapaxes(1,2)
# 将1轴和2轴进行调换

实际上索引的顺序就是按照轴的顺序(0轴则为常说的行,1轴就是常说的列)来操作的

  • 类型转换
arr2 = arr1.astype(np.float64)
# 此处将arr1转换为全是float64类型的arr2
# 总是生成一个新的数组

其类型有int8,int16,int32,int64,float16,float32,float64,float128,bool,object等

  • 索引

数组可以执行切片操作,例如[1:2]

注意索引返回的对象只是之前数组的视图,对齐的改变也会反应到原数组

需要使用arr[1:2].copy()来获得副本

通过两次索引可以得到一个单值

arr[:2,1:] = 0
# 通过这种方式可以实现多维切片,也就是两次索引
# 而不需要去使用两个中括号
# 可以使用赋值来修改此处对应的元素

布尔操作

arr == 1
# 其可以返回一个由布尔值组成的数组
# 为1的值为True
data[arr == 1, 2:]
# arr必须为一个一维数组,否则不能只在行上进行索引
# 此处arr == 1返回了一个布尔一维数组,为True的就进行索引
data[data == 1] = 0
# 注意data == 1返回的是一个数组,如果其是二维,就具有二维结构
# 会把数组中为1的元素都替换为0
data[~(arr == 1), 2:]
# 使用~符号可以对一个进行取反,实际上就是对布尔值取反
# 使用&和|可以组合多个条件

 也可以直接传入一个整数数组来进行索引

arr[[4,3]]
# 此时实际上就是索引了第四行和第三行,并将其放在了第一行和第二行的位置
  •  通用函数 

用于对元素进行批量操作

np.exp(arr)
# 逐元素进行指数运算
# 一元通用函数,只接收一个array
np.maximum(x,y)
# 对比两个array,获得结果
  • 向量化

数组通过向量化的方式来替代显示循环,从而提高运算速度

np.meshgrid(a,b)
# 接收两个一维数组
# 其会依次遍历,生成a*b个数目的坐标矩阵
np.where(cond,xarr,yarr)
# cond为一个布尔值数组
# 获得True则使用xarr中索引对应值
# 获得False则使用yarr中索引对应值
# 实际上就是在向量上进行一个if的辨识,最后也返回一个向量

数学统计

np.mean(arr,axis=0)
# 计算每一行的平均值,返回一个一维数组
# 注意统计函数大多是聚合结果,会发生维度下降
# 未指定axis则在整个数组上进行计算,获得一个结果
# 同样的函数有sum,mean,std,var,min,max,argmin,argmax

涉及到布尔值的计算

(array>0).sum()
# 通常会使用sum()函数来统计布尔真值的个数
boolarray.all()
# 如果均为True,才返回一个True
boolarray.any()
# 只要包含一个True,就返回一True

排序及计算

arr.sort(axis=1)
# 在1轴上进行排序,就是在每行上按照大小排序
# 返回的是拷贝
np.unique()
# 返回唯一值,并排序
# 也可以进行交集,并集计算
  • 文件的导入和导出

不推荐使用numpy来进行文件传递

  •  生成随机数据

该功能来自于numpy中的random模块

np.random.normal(size=(4,4))
# 返回一个4*4的标准正态数据组成的数组
# 类似的分布有rand(均匀分布),randn(标准正态分布),binomial(二项分布),beta(beta分布),chisquare(卡方分布),gamma(伽马分布),uniform(均匀01分布)
np.random.seed(2)
# 向随机数生成器传递随机数种子
np.random.shuffle(seq)
# 随机排列一个序列
np.random.rand()
# 从均匀分布中抽取样本

 

 

 

  

posted @ 2020-12-02 19:28  lixin2020  阅读(108)  评论(0)    收藏  举报