Python 数据科学 (1)——NumPy(3.Arrays 逻辑篇)

本贴最后更新于 2161 天前,其中的信息可能已经时移世异

比较和排序

我们知道,在算法中,排序总是离不开比较的,那么在 numpy 中是否也是如此呢?让我们来看看。

比较、掩码和布尔逻辑

比较

In [1]: import numpy as np In [2]: a = np.array([3,4,5]) In [3]: a < 4 Out[3]: array([ True, False, False], dtype=bool) In [4]: (2 * a) == (a ** 2) Out[4]: array([False, False, False], dtype=bool)

numpy 中比较函数和对应运算符等价

运算符 对应函数 运算符 对应函数
== np.equal != np.not_equal
< np.less <= np.less_equa
> np.greater >= np.greater_e

使用比较运算符,可以实现一些过滤操作:

In [5]: a = np.array([-5,-4,-30,3,4,5]) In [6]: np.count_nonzero(a < 0) # 小于0的元素个数 Out[6]: 3 In [8]: np.sum(a < 0)# 小于0的元素个数 Out[8]: 3 In [9]: np.any(a > 0)# 是否存在大于0的元素 Out[9]: True

布尔逻辑

同样的,numpy 矩阵支持布尔逻辑运算

In [17]: np.sum((a > -1) & (a < 1))# 位于-1到1之间的元素个数 Out[17]: 1

布尔矩阵作为掩码

类似于过滤,我们可以使用布尔矩阵作为矩阵索引,获取相应的数据

In [18]: a = np.array([[5,0,3,3],[7,9,3,5], [2,4,7,6]]) In [19]: a[a<5] Out[19]: array([0, 3, 3, 3, 2, 4])

排序

numpy 中的排序

快速排序:sort 和 argsort

In [20]: x = np.array([2, 1, 4, 3, 5]) In [21]: x.sort() In [22]: x Out[22]: array([1, 2, 3, 4, 5])#可以看出,快速排序是原址排序 In [23]: x = np.array([2, 1, 4, 3, 5]) In [24]: x.argsort() In [26]: i = x.argsort()#只返回索引 In [27]: i Out[27]: array([1, 0, 3, 2, 4]) In [28]: x[i]#利用排序后的index,我们可获得排序结果 Out[28]: array([1, 2, 3, 4, 5])

部分排序

寻找 k 个最小值

In [34]: x = np.array([7, 2, 3, 1, 6, 5, 4]) ...: np.partition(x, 3) Out[34]: array([2, 1, 3, 4, 6, 5, 7])
In [35]: rand = np.random.RandomState(42) ...: X = rand.randint(0, 10, (4, 6)) In [36]: np.partition(X, 2, axis=1) Out[36]: array([[3, 4, 6, 7, 6, 9], [2, 3, 4, 7, 6, 7], [1, 2, 4, 5, 7, 7], [0, 1, 4, 5, 9, 5]])
  • 数据科学
    7 引用 • 1 关注
  • numpy
    9 引用 • 1 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    556 引用 • 674 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...