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 沿轴向计算所有元素的数据的平均值
std,var 标准差和方差,可选择自由度调整(默认分母是n)
min,max 最小值和最大值
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进行数据分析》,更多知识请阅读原书