Numpy系列
Numpy_01 创建 指定数据类型 查看维度和数据类型 简单的数学运算
Numpy_02 索引和切片
Numpy_03 转置和轴对换
Numpy_04 通用函数
Numpy_05 数据处理
Numpy_06 数组的文件输入输出 线性代数
利用数组进行数据处理
import numpy as np points = np.arange(-5, 5, 1) # 100个等间距点 xs, ys = np.meshgrid(points, points) # 接收两个一维数组 返回两个二维数组 print('xs:\n', xs) # 返回一个 数组元素个数这么多行的二维数组 内容和一维的数组一样 print('ys:\n', ys) # 返回一个 数组元素个数这么多汗的二维数组 内容为原数组的一个元素为一行 print('-------------------------------') # 两点间距离公式 z = np.sqrt(xs ** 2 + ys ** 2) # 对 xs 的每个元素平方加上 ys 的每个元素平方 再开方并返回 print(z)
将条件逻辑表述为数组运算
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)] # 如果c为True返回x的值 否则返回y的值 print(result) # 同上功能 result = np.where(cond, xarr, yarr) print(result) arr = np.random.randn(4, 4) # 随机生成一个 4x4的矩阵 print(arr) # 打印这个矩阵 print(arr > 0) # 判断arr里的值是否 > 0 返回True 否则返回 False 最后返回一个 布尔类型的数组 print(np.where(arr > 0, 2, -2)) # 将所有正值 替换为2 否则替换为 -2 print(np.where(arr > 0, 2, arr)) # 用 2 替换所有 arr的正值
数学和统计方法
求平均值,求和
arr = np.random.randn(5, 4) print(arr) print(arr.mean()) # 求平均值 print(np.mean(arr)) # 求平均值 print(arr.sum()) # 求和
选择高维数组的轴
# mean和sum这类的函数可以接受一个axis选项参数,用于计算该轴向上的统计值,最终结果是一个少一维的数组: arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr) # arr.mean(1)是“计算行的平均值”,arr.sum(0)是“计算每列的和”。 print(arr.mean(axis=1)) print(arr.sum(axis=0))
累加函数
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7]) print(arr.cumsum()) # 累加函数 第一项等于前一项和 第二项等于前两项和 第三项等前三项和...
累积函数
arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) print(arr) print(arr.cumsum(axis=0)) # 累加函数(如cumsum)返回的是同样大小的数组,但是会根据每个低维的切片沿着标记轴计算部分聚类 print(arr.cumprod(axis=1)) # 累积函数
下面列出常用数据处理的聚合函数的表:
列出了全部的基本数组统计方法
arr = np.random.randn(100) print((arr > 0).sum()) # .sum()方法疑是失效 bools = np.array([False, False, True, False]) print(bools.any()) # 测试数组中是否存在一个或多个True print(bools.all()) # 检查数组中是否所有的值都为 True # 以上两个方法也能用于非布尔类型数组,所有非0元素将会被当作True
sort()函数
# 例 a = np.array([[3, 7], [9, 1]]) print('我们的数组是:') print(a) print('\n') print('调用sort()函数:') print(np.sort(a)) print('\n') print('沿轴 0 排序:') print(np.sort(a, axis=0)) print('\n') # 在sort函数中排序字段 dt = np.dtype([('name', 'S10'), ('age', int)]) a = np.array([('raju', 21), ('anil', 25), ('ravi', 17), ('amar', 27)], dtype=dt) print('我们的数组是:') print(a) print('\n') print('按name排序:') print(np.sort(a, order='name'))
argsort()函数
# 没看懂 间接排序 # numpy.argsort() # numpy.argsort()函数对输入数组沿给定轴执行间接排序,并使用指定排序类型返回数据的索引数组。 这个索引数组用于构造排序后的数组。 arr = np.random.randn(5, 3) print(arr) arr.sort(1) print(arr) x = np.array([3, 1, 2]) print('我们的数组是:') print(x) print('\n') print('对 x 调用 argsort() 函数:') y = np.argsort(x) print(y) print('\n') print('以排序后的顺序重构原数组:') print(x[y]) print('\n') print('使用循环重构原数组:') for i in y: print(x[i])
函数使用键序列执行间接排序。 键可以看作是电子表格中的一列。 该函数返回一个索引数组,使用它可以获得排序数据。
注意,最后一个键恰好是 sort 的主键。 nm = ('raju', 'anil', 'ravi', 'amar') dv = ('f.y.', 's.y.', 's.y.', 'f.y.') ind = np.lexsort((dv, nm)) print('调用 lexsort()函数:') print(ind) print('\n') print('使用这个索引来获取排序后的数据:') print([nm[i] + ',' + dv[i] for i in ind])
唯一化以及其它的集合逻辑
NumPy提供了一些针对一维ndarray的基本集合运算。最常用的可能要数np.unique了,它用于找出数组中的唯一值并返回已排序的结果:
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe']) print(np.unique(names)) # 将names数组唯一化 ints = np.array([3, 3, 3, 2, 2, 1, 1, 4, 4]) print(np.unique(ints)) # 将ints数组唯一化 print(sorted(set(names))) # 纯Python实现
另一个函数np.in1d用于测试一个数组中的值在另一个数组中的成员资格,返回一个布尔型数组:
values = np.array([6, 0, 0, 3, 2, 5, 6]) print(np.in1d(values, [2, 3, 6]))
来源:https://www.cnblogs.com/Mrzhang3389/p/9684756.html