学习笔记,这个笔记以例子为主。
开发工具:Spyder


文章目录

  • 排序
    • 联合间接排序lexsort
    • 复数数组排序sort_complex
    • 插入排序searchsorted

排序

我们可以简单的,直接的对数组进行排序,并返回有序数组。

  • 语法
有序数组 = np.msort(待排序数组)
  • 例子

代码:

import numpy as npnum = np.array([1, 7, 3, 2, 9, 5, 3])
sorted_num = np.msort(num)
print('排序后数组:', sorted_num)

结果:

排序后数组: [1 2 3 3 5 7 9]

联合间接排序lexsort

联合间接排序支持为主序列进行排序,若存在主序列值相同,则利用次要序列1作为参考继续排序,以此类推,最终返回排序过后的有序索引数组。

  • 语法
indices = numpy.lexsort((次要序列k,..., 次要序列1, 主序列))
  • 例子1

先按照weight排序,再按照age排序,再按照id_num排序。(都是升序排序)

代码:

import numpy as npnames = np.array(['A', 'B', 'C', 'D', 'E', 'F', 'G'])weight = [7, 4, 3, 5, 8, 3, 4]
age  = [8, 7, 2, 3, 8, 3, 7]
id_num = list(range(1, 8))index_num = np.lexsort((id_num, age, weight))
print(names[index_num])

结果:

['C' 'F' 'B' 'G' 'D' 'A' 'E']
  • 例子2

先按照weight升序排序,再按照age升序排序,再按照id_num降序排序。

代码:

import numpy as npnames = np.array(['A', 'B', 'C', 'D', 'E', 'F', 'G'])weight = [7, 4, 3, 5, 8, 3, 4]
age  = [8, 7, 2, 3, 8, 3, 7]
id_num = np.array(list(range(1, 8))) index_num = np.lexsort((-id_num, age, weight))
print(names[index_num])

备注:降序排列可以在数组前加-负号,但是要将数组转换成ndarray数组才能进行负号运算,普通列表则不能进行此运算。

结果:

['C' 'F' 'G' 'B' 'D' 'A' 'E']

复数数组排序sort_complex

按照实部的升序排列,对于实部相同的元素,参考虚部的升序,直接返回排序后的结果数组。

  • 语法
numpy.sort_complex(复数数组)
  • 例子

代码:

import numpy as npnum = np.array([2 + 3j, 1 + 2j, 5 + 1j,8 - 2j, 8 + 1j, 2 + 1j])sorted_num = np.sort_complex(num)
print(sorted_num)

结果:

[ 1.+2.j  2.+1.j  2.+3.j  5.+1.j  8.-2.j  8.+1.j]

插入排序searchsorted

若需要向有序数组中插入元素,使数组依然有序,numpy提供了searchsorted方法,返回待插入元素的可插入位置数组。

  • 语法
indices = numpy.searchsorted(有序序列, 待插序列)
  • 例子

代码:

import numpy as npa = np.array([1, 2, 4, 5, 7])
b = np.array([3, 6])c = np.searchsorted(a, b)
print(c)
d = np.insert(a, c, b)
print(d)

备注:numpy提供的insert方法,可向原数组的指定位置插入元素。比如,A为原数组,B为索引数组,C为待插入元素数组。 insert(A, B, C)为向A的B位置插入C数据。

结果:

[2 4]
[1 2 3 4 5 6 7]

numpy基础(part13)--排序相关推荐

  1. python之numpy基础_Python知识普及:Numpy基础操作

    原标题:Python知识普及:Numpy基础操作 Numpy基础数据结构 创建数组 Numpy通用函数 import numpy as np # reshape 改变数组维度形状 ar1 = np.a ...

  2. 【Python】Numpy基础:数组和矢量运算

    Numpy基础:数组和矢量运算 目录: 文章目录 一 Numpy及其重要性 二 ndarray:一种多维数组对象 1 创建ndarray 2 ndarray的数据类型 3 数组和标量之间的运算 4 基 ...

  3. python输入数组并计算_利用Python进行数据分析——Numpy基础:数组和矢量计算

    利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...

  4. python中ndarray对象实例化_Python数据分析之Numpy学习 2——NumPy 基础 ndarray对象

    Python数据分析之Numpy学习 2 -- NumPy 基础学习 NumPy(Numerical Python)是高性能科学计算和数据分析的基础包.NumPy的主要对象是同构数据多维容器(homo ...

  5. 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算

    第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说,用numpy的主要目的在于应用矢量化运算.Numpy并没有多么高级的数据分析功能,理解Numpy ...

  6. 数据分析之numpy基础/matplotlib绘图/numpy常用函数/杂项功能

    文章目录 数据分析 numpy概述 numpy`历史` numpy的核心:多维数组 numpy基础 ndarray数组 内存中的ndarray对象 ndarray数组对象的特点 ndarray数组对象 ...

  7. numpy基础(1)

    numpy基础(1) 以下教程涉及到的文字均来自于莫烦Python.有一个坑需要避免下:二维数组需要多加一个括号,要不会报错. numpy属性 ndim:维度 shape:行数和列数 size:元素个 ...

  8. python 数据分析5 NumPy 基础:数组和矢量计算

    系列文章:Python 数据分析 文章目录 五.NumPy 基础:数组和矢量计算 1.n维数组对象 ndarray 创建 dtype 数组运算 基本的索引和切片 一维数组 二维数组 布尔型索引 花式索 ...

  9. Python数据分析学习四 NumPy基础:数组和矢量计算

    Python数据分析学习系列四NumPy基础:数组和矢量计算 资料转自(GitHub地址):https://github.com/wesm/pydata-book 有需要的朋友可以自行去github下 ...

最新文章

  1. 基于OpenCV的实战:轮廓检测(附代码解析)
  2. java 传参字符串数组_JAVA语言之okhttp传递数组参数
  3. php邮件发送失败,php服务器发送邮件失败问题解析
  4. Apache Ant运行时Unable to locate tools.jar解决方法
  5. STM32 基础系列教程 40 - Lwip_mqtt
  6. 表的插入、更新、删除、合并操作_20_通过表关联删除多张表
  7. SpringMVC转发和重定向
  8. mysql workbench 无法编辑_MySQL Workbench编辑表数据是只读的
  9. 【ujson】pip安装ujson报错: error:Microsoft Visual C++ 14.0 is required
  10. 【OpenCV】OpenCV函数精讲之 -- addWeighted()函数(线性混合)
  11. Autocad 2015如何激活成功
  12. 10大Go语言开源项目推荐
  13. [转]vs2008 + OpenCV-2.1.0-win32-vs2008安装
  14. python类定义和初始化,Python类定义、属性、初始化和析构,指针定义和初始化
  15. Android蓝牙配对
  16. casquette swagg:泉州故事
  17. HeadFirst设计模式笔记——工厂模式
  18. 印象笔记终于支持 Markdown 了
  19. vue 项目获取QQ音乐歌单数据
  20. (python) 1200000有多少个约数(只计算正约数)

热门文章

  1. 深度学习(七)—— GAN
  2. nginx php fpm socket,php-fpm 使用 socket 方式和 nginx 通讯,(速度优化)
  3. Springmvc中的拦截器interceptor及与过滤器filter的区别
  4. bzoj4472: [Jsoi2015]salesman(树形dp)
  5. eclipse实现批量修改文件的编码方式
  6. 浅析正则表达式——柳暗花明又一村篇
  7. ORACLE SQL调优之执行计划与隐藏参数_complex_view_merging
  8. 联想EDU同传系统 版本7.5 7.6在机房中出现的一些故障和解决办法
  9. android 两个客户端间的通信(Socket通信)
  10. android意图传递参数返回结果(六)