Python for Data Analysis
numpy基础
嗯 调整了一些顺序
1 ndarray(n维数组)
导入数据、基本运算和数组生成
import numpy as np
#矢量化 将数据转化为数组
data=[[1,2,3],[4,5,6]]
arr=np.array(data,dtype=np.float64)
new_arr=arr.astype(np.int64) #astype可以将字符串存储的数据转为数值
arr.ndim
arr.shape
arr*arr
arr+arr
arr-arr #相同大小的数组运算会传递到每个元素 不需要循环
1/arr
arr**0.5 #数组与标量运算
arr2=np.array([[3,2,1],[6,5,4]],dtype=np.float64)
arr2<arr #大小相同的数组比较会产生布尔值
np.zeros(10) #第一个参数是shape
np.ones((3,6))
np.empty((2,3,2))
2 索引
基本索引和切片
大致同列表 任何数组的视图上的修改都会反映到原数据上
arr_slice=arr[0]
arr_slice[:]=1
arr #arr[0]全部转为1.
new=arr[5:8].copy() #如果从副本上修改 不修改原arr需要用copy函数
arr[0,1] #二维数组(两层中括号)的索引方式 [行,列] 高纬度依次类推
arr[0,1:] #切片时可分别对一个轴切片 只有冒号为选取整个轴
布尔型索引
相当于虚拟变量(0 1) 可以用来匹配ID 条件筛选 总是创建副本
names=np.array(['Bob','A','B','Bob','C','D','E'])
data2=np.random.randn(7,4) #生成随机矩阵
names == 'Bob' #返回True/False的一维数组 各类判断都OK
#否定 (!=) 或者~(names=='A') 多个条件用&和 |
#and和or在布尔数组中无效
data2[names == 'Bob',2:] #索引与切片结合 names长度应该与data2一致
花式索引
总是一维的 会复制到新数组
arr3=np.empty((8,4))
for i in range(8):
arr3[i]=i
arr3 #eg1
arr3[[4,3,0,6]] #以特定顺序选取子集
arr3[[-3,-5,-7]]
arr4=np.arange(32).reshape(8,4) #reshape整理数组 eg2
arr4[[1,5,7,2],[0,3,1,2]] #选中的是(1,0)(5,3)(7,1)(2,2)
arr4[[1,5,7,2]][:,[0,3,1,2]] #对每选中一维重新排序
数组转置&轴对称
arr.T #不会复制新数组
np.dot(arr.T,arr) #计算内积
arr5=np.arange(16).reshape((2,2,4))
arr5.transpose(1,0,2) #第一、二轴互换
arr5.swapaxes(1,2) #接受一对轴编号 返回视图
3 通用函数
元素级运算 接受一个out可选参数
np.sqrt(arr) #开方
np.exp(arr) #e的x次方
np.maximum(arr,arr2) #返回两者中最大值
np.fmax(arr,arr2) #忽略nan
np.minimum(arr,arr2) #最小值
np.fmin(arr,arr2) #忽略nan
np.abstract(arr,arr2) #arr-arr2
np.add(arr,arr2) #相加
np.divide(arr,arr2) #除法
np.mod(arr,arr2) #求模
np.floor_divide(arr,arr2) #圆整除法
np.power(arr,arr2) #arr的arr2次方
remainder, whole_part = np.modf(data2) #remainder:小数部分组成的数组 whole:整数
np.copysign(arr,arr2) #将arr2的符号给arr
np.abs(arr) #绝对值
np.fabs(arr) #非复数更快
np.square(arr) #平方
#log log10 log2 log1p
#sign 返回正负号
#ceil 大于等于该值的最小整数
#floor 小于等于该值的最大整数
#rint 四舍五入到整数 保留类型
#isnan 哪些值非数字的布尔型数组
#isfinite 哪些值有穷的布尔型数组
#isinf 哪些值无穷的布尔型数组
#cos cosh sin sinh tan tanh 普通、双曲三角函数
#arccos arccosh arcsin arcsinh arctan arctanh 反~
#logical_not(arr) 相当于-arr
#greater、greater_equal、less、less_equal、equal、not_equal 相当于比较运算符
#logical_and、logical_or、logical_xor 相当于&、|、^
4 用于数组的文件输入输出
arr=np.arange(10)
np.save('some_array',arr) #保存为npy的文件
np.load('some_array.npy') #读取数组
np.savez('array_archive.npz',a=arr,b=arr) #多个数组保存至未压缩文件 以关键字参数传入
arch=np.load('array_archive.npz') #加载数据 类似字典
arch['b']
np.savez_compressed('array_archive.npz',a=arr,b=arr) #数据压缩