(11)numpy基础3:面向数组编程

1 牛刀小试 

对网格数据可视化 样例

points = np.arange(-5, 5, 0.01) # 生成起始为-5,步长为0.01,结束为5的数组
points
xs, ys = np.meshgrid(points, points) #据两个数组生成网格采样点的函数,结果是二维矩阵
ys
注意:[X,Y] = meshmeshgrid(x,y) ; 返回的两个矩阵X、Y必定是行数、列数相等的且X、Y的行数都等于输入参数y中元素的总个数,X、Y的列数都等于输入参数x中元素总个数

z = np.sqrt(xs ** 2 + ys ** 2) #用两个坐标值同样的表达式来求平方根
z

import matplotlib.pyplot as plt #导入可视化工具
plt.imshow(z, cmap='gray'); plt.colorbar() #colorbar() 创建颜色条
plt.title("Image plot of $\sqrt{x^2 + y^2}$ for a grid of values") 
plt.draw()
plt.close('all')
注意:imshow方法用于绘制热图,入参cmap是colormap的简称,用于指定渐变色

 2 条件逻辑作为数组操作 np.where

numpy.where 是三元表达式  x if condition else y 的向量化版本

样例:

通过解析器解释python代码完成,执行效率慢

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)] #推导式,加 三元表达式
result

样例优化 where :

np.where的入参可不一定是数组,可以是标量,where的用法是据一个数组来生成一个新数组

result = np.where(cond, xarr, yarr)
result

 

where的使用样例

arr = np.random.randn(4, 4)
arr
arr > 0
np.where(arr > 0, 2, -2) #入参是标量:表示arr数组中元素,大于0则返回2,反之返回-2
np.where(arr > 0, 2, arr) #入参是标量和向量的组合:大于0则返回2,反之返回原数组内容

3 数学和统计方法

基础方法有

sum 沿轴向计算所有元素的累和

mean 沿轴向计算所有元素的数据的平均值

stdvar 标准差和方差,可选择自由度调整(默认分母是n)

minmax 最小值和最大值

argmin,argmax 最小值和最大值的位置

cumsum 从0开始元素累计和

cumprod 从1开始元素累计积

许多关于计算数组统计值或关于轴向数据的数学函数,可作为数组类型的方法被调用

arr = np.random.randn(5, 4)
arr
arr.mean() # 平均值,方式1
np.mean(arr)  # 平均值,方式2
arr.sum() #求和
arr.mean(axis=1) #求列的平均值
arr.sum(axis=0) #求行的和

可选参数axis,这个参数可用于计算给定轴向上的统计值,形成一个下降一维度的数组:

axis的值为0时,以行为维度的统计;值为1时,以列为维度的统计

arr = np.array([0, 1, 2, 3, 4, 5, 6, 7])
arr.cumsum() #求各值的累计和
arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
arr
arr.cumsum(axis=0)  #求每行与累计之前行的和
arr.cumprod(axis=1) #求列与累计之前列的乘积

 4 布尔值数组的方法

arr = np.random.randn(100)
(arr > 0).sum() # 正值的个数
bools = np.array([False, False, True, False])
bools.any() #检查是否有true存在
bools.all() #检查是否全部为true

5 排序 sort()  

排序好的数组,是拷贝一份,原数组不变

arr = np.random.randn(6)
arr
arr.sort()
arr
arr = np.random.randn(5, 3)
arr
arr.sort(1) #对每一维数组排序
arr
arr[int(0.05 * len(large_arr))] #据排序后,取排序后的需要的位置

6 唯一值 unique 与其他集合逻辑 

unique(x)  计算x的唯一值,并排序

intersectld(x,y) 计算x和y的交集,并排序

unionld(x,y) 计算x和y的并集,并排序

inld(x,y) 计算x中的元素是否包含在y中,返回一个布尔值数组

setdiffld(x,y) 差集,在x中但不在y中的x的元素

setxorld(x,y) 异或集,在x或y中,但不属于x、y交集的元素

names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
np.unique(names)
等同于
sorted(set(names))
ints = np.array([3, 3, 3, 2, 2, 1, 1, 4, 4])
np.unique(ints)
values = np.array([6, 0, 0, 3, 2, 5, 6])
np.in1d(values, [2, 3, 6]) #检查一个数组中的值是否在另一个数组中,返回布尔值数组

 

本篇知识点参考《利用python进行数据分析》,更多知识请阅读原书

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值