《利用python进行数据分析》学习笔记(四)

Numpy

学习笔记四主要针对本书的第四章进行总结。

ndarry

Numpy最重要的特点就是其N维数组对象,可以利用这种数组对整块数据执行数学运算。

data.shape
data.dtype

每个数组都有一个shape和一个dtype。

创建ndarry
# 利用array创建
data = [[1,2,3],[8.1,2,4]]
arr = np.array(data)
# 数组维度,这个data就是2维
arr.dim

# 利用zeros和ones创建
# shape为(m,n)的全零数组
np.zeros((m,n))
# shape为(m,n)的全一数组
np.ones((m,n))
# shape为((x,y,z))的未初始化值
np.empty((x,y,z))

# arange
np.arange(15)

这里写图片描述

ndarry数据类型
# 利用array创建, 并设置数据类型
arr = np.array([1,2,3],dtype = np.int32)
# 利用astype改变数据类型
float_arr = arr.astype(np.float64)
基本索引和切片

numpy跟python列表的功能相似,但跟列表最重要的区别在于数组切片是原始数组的视图。这意味着数据不会被赋值,视图上的任何修改都会直接反映到原数组上,不用复制来复制去,就能解决性能和内存的问题。

# arr的第6个元素,下标从0开始
arr[5]
# arr的第6到第8个元素
arr[5:8]
# 得到复制
arr[5:8].copy()
# 二维索引
arr[0][2]
arr[0,2]
布尔索引
names = np.array(['Bob','Joe','Bob','Will','Joe'])
data = np.random.randn(5,4)

# 输出一个布尔量的数组
names == 'Bob'
# out:array([True,False,True,False,False],dtype=bool)

# 利用这个布尔数组进行索引,得到对应行
data[names == 'Bob']
# 反索引
data[-(names == 'Bob')]
data[names != 'Bob']
花式索引
# 以特定顺序选取行子集
arr[[4,3,0,6]]

#选取特定位置子集
arr[[1,5,7,2],[0,3,1,2]]
#(最后选出的元素为(1,0)、(5,3)、(7,1)、(2,2))

# 选出一个方形区域
 arr[np.ix_([1,5,7,2],[0,3,1,2])]
利用数组进行数据处理

用数组表达式代替循环的做法,通常被称为矢量化。一般来说,矢量化数组运算要比等价的纯python方式快上一两个数量级(甚至更多)。

# 1000个间隔相等的点
points = np.arange(-5,5,0.01)
xs,ys = np.meshgrid(points,points)
z = np.sqrt(xs**2 + ys**2)
将条件逻辑表述为数组运算

np.where函数是三元表达式(x if condition else y)的矢量化版本。

xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond = np.array([True, False, True, True, False])

# 利用循环
result  = [(x if c else y)
			for x,y,c in zip(xarr,yarr,cond)]
# 利用where
result = np.where(cond,xarr,yarr)

利用循环第一对大数组的处理速度不是很快(因为所有工作都是由纯Python完成的),第二无法用于多维数组,所以用where更好。

集合运算

这里写图片描述

线性代数
import numpy.linalg

这里写图片描述

随机数生成
import numpy.random

这里写图片描述


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值