python中unique_Python数据分析入门|利用NumPy高效处理高维数据

矢量化

NumPy数组可以将许多数据处理任务表述为简洁的数组表达式,否则需要编写循环。用数组表达式代替循环的做法,通常被称为矢量化。通常矢量化数组运算要比等价的纯Python方式快上一两个数量级,尤其是各种数值计算。

假设我们想要在一组值(网格型)上计算函数sqrt(x^2 + y^2)。np.meshgrid()函数接受两个一维数组,并产生两个二维矩阵,对应于两个数组中所有的(x, y)对。

points = np.arange(-5, 5, 0.01) #1000个间隔相等的点。xs, ys = np.meshgrid(points, points)z = np.sqrt(xs ** 2 + ys ** 2)
8c255ff023757caf0912f007717bf1cd.png

将条件逻辑表述为数组运算

  • np.where()函数是三元表达式 x if condition else y的矢量化版本。假设我们有一个布尔数组和两个值数组:
9f2133f61742aaceeb516a50fe205029.png
  • 这有一些问题。第一,它对大数组的处理速度不是很快;第二,无法用于多维数组。若使用np.where(),则可以将该功能写得非常简洁。
7a9906e4ce3e443375bbbd117941aef5.png
  • np.where()的第二个和第三个参数不必是数组,也可以是标量值。where()通常用于根据另一个数组产生一个新的数组。
e49320166bcc3d41119e95aeec962fd6.png
  • np.where()可以表述更加复杂的逻辑。
#Pythonresult = []for i in range(n): if cond1[i] and cond2[i]: result.append(0) elif cond1[i]: result.append(1) elif cond2[i]: result.append(2) else: result.append(3)​#NumPynp.where(cond1 & cond2, 0, np.where(cond1, 1, np.where(cond2, 2, 3)))​#利用布尔值在计算过程中可以被当做0或1处理result = 1 * (con1 - cond2) + 2 * (con2 & -cond1) + 3 * -(cond1 | cond2)

数学和统计方法

b85b981cdcba43e51a7e0da8e68fcd73.png

用于布尔型数组的方法

  • 在使用基本统计方法时,布尔值会被强制转换为1和0,因此sum经常被用来对布尔型数据中的True值计数。
  • 另外还有两个方法any()和all(),它们对布尔型数组非常有用。any()用于测试数组中是否存在一个或多个True,而all()则检查数组中所有制是否都是True,两个方法均返回布尔值结果。这两个方法也可用于非布尔型数组,所有非0元素均会被当作True。

排序

  • 与Python内置的列表类型一样,NumPy数组也可以通过sort方法就地排序(会对原数组进行操作)。
  • 多维数组可以在任何一个轴向上进行排序,只需将轴编号传给sort即可。
  • 顶级方法np.sort()返回的是数组的已排序副本,而就地排序则会修改数组本身。计算数组分位数最简单的方法是对其进行排序,然后取特定位置的值:
282a980fe1ba17035d13379d6ea9b8f5.png

唯一化以及其他的集合逻辑。

  • NumPy提供了一些针对一维ndarray()的基本集合运算,最常用的可能要数np.unique()了,它用于找出数组中的唯一值并返回已排序的结果。
15ad70e276ebc80c5dc3c196fa3c5cb5.png
  • 拿跟np.unique()等价的纯Python代码对比一下:
035ffa39f6c95272e47892660b460123.png
  • 另一个函数np.in1d()用于测试一个数组中的值在另一个数组中的成员资格,返回一个布尔型数组:
127c27522fdeef429f9e7fa093d63e80.png
d95905b7028258fd2296ab9eb1179cea.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值