Numpy_05 数据处理

别等时光非礼了梦想. 提交于 2020-03-04 08:25:22

github博客传送门
csdn博客传送门

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]))
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!