实现二维数组或多维数组排序得方法

2023-11-18

例:对数组[(3,2), (6,2), (3,6), (3,4), (5,3)]进行排序

方法一:

import numpy as np
a = np.array([(3,2), (6,2), (3,6), (3,4), (5,3)])
ind = np.lexsort((a[:,1],a[:,0]))
print(a[ind])
------------------------------------
[[3 2]
 [3 4]
 [3 6]
 [5 3]
 [6 2]]

其中np.lexsort((a[:,1],a[:,0]))是一个间接联合排序函数,意思根据给定参数从最后一个参数开始进行排序,如果最后一个参数给定的值相同,则根据倒数第二个参数进行排序,以此类推。

方法二:

a = np.array([(3,2), (6,2), (3,6), (3,4), (5,3)])
dt = [("col1", a.dtype), ("col2", a.dtype)]
assert a.flags["C_CONTIGUOUS"]
b = a.ravel().view(dt)
b.sort(order=['col1','col2'])
print(a)
-------------------------------------
[[3 2]
 [3 4]
 [3 6]
 [5 3]
 [6 2]]

 方法三:

import numpy as np
a = np.array([(3,2), (6,2), (3,6), (3,4), (5,3)])
atmp = np.sort_complex(a[:,0]+a[:,1]*1j)
b = np.array([[np.real(x), np.imag(x)] for x in atmp])
print(b)
-----------------------------------------------
[[3. 2.]
 [3. 4.]
 [3. 6.]
 [5. 3.]
 [6. 2.]]

其中np.sort_complex是一个复数直接排序函数,先用实部,然后用虚部排序一个复杂数组。

例:mat= [1.+2.j 3.+4.j 5.+6.j]

实部: [1. 3. 5.] 相当于:np.real

虚部: [2. 4. 6.] 相当与:np.imag

方法四:

import numpy as np
a = np.array([(3,2), (6,2), (3,6), (3,4), (5,3)])
b = np.array(sorted(sorted(a,key=lambda e:e[1]),key=lambda e:e[0]))
print(b)
-------------------------------------------
[[3 2]
 [3 4]
 [3 6]
 [5 3]
 [6 2]]

方法五:

a = np.random.randint(1,6,(10,3))
print(a)
b = a[np.lexsort(np.transpose(a)[::-1])]
print(b)
----------------------
[[4 3 4]
 [5 1 5]
 [2 4 1]
 [5 3 5]
 [2 4 3]
 [1 3 2]
 [4 4 5]
 [3 2 1]
 [1 4 5]
 [3 2 5]]
[[1 3 2]
 [1 4 5]
 [2 4 1]
 [2 4 3]
 [3 2 1]
 [3 2 5]
 [4 3 4]
 [4 4 5]
 [5 1 5]
 [5 3 5]]

其中np.transpose是坐标映射函数,其实就是交换了坐标轴,如:x.transpose(1, 2, 0),其实就是将x第二维度挪到第一维上,第三维移到第二维上,原本的第一维移动到第三维上,最后的shape为:(3,2,2)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现二维数组或多维数组排序得方法 的相关文章

随机推荐

  • vscode是什么(vscode干嘛用的)

    vscode是什么 接触VSCode不太长 但是我觉得我越来越喜欢它 所以我想写些关于它的东西 vscode 首先介绍一下这东西是什么 当然 这是由M 开发和开源的轻量级IDE 可以免费使用 我这样定义 它和VisualStudio之间的区
  • Youtube ASX Portfolio的视频笔记 What is a Quant? - Financial Quantitative Analyst

    What is a Quant Financial Quantitative Analyst YouTube youtube 上搜 option pricing 很多讲解 Stochastic Calculus的 In this video
  • RTTI简述

    RTTI的用途 RTTI的使用 dynamic cast typeid 使用总结 dynamic cast与其他转换运算符 RTTI的用途 得益于虚函数表 如果派生类实现了基类中的虚函数 通过基类指针或引用可以完成正确的函数调用 但是也不得
  • Oracle在Linux系统连接很慢的问题

    无比的兴奋 新版本的Bing支持国际版 这样就可以更好的检索国外的资料了 Oracle在Centos7中连接局域网内的速度很慢的问题 终于找到问题的原因了 当然可能还会存在其他问题 本文考虑两个 1 代理问题 ProxySelector s
  • linux mknod命令解析【转】

    转自 https blog csdn net a1010256340 article details 83088870 linux系统中设备管理的基本知识 我们的linux操作系统跟外部设备 如磁盘 光盘等 的通信都是通过设备文件进行的 应
  • linux qcom串口下载,qcom 跨平台的串口调试工具 PKGBUILD

    Id PKGBUILD 2013 06 26 GunsNRose Maintainer GunsNRose Contributor GunsNRose pkgname qcom git pkgname pkgname git pkgver
  • Vue,点击文字更换文本

    div div
  • elasticsearch简介与基本操作

    是什么等 废话后置 1 elasticsearch 分为3个部分 index mapping setting 1 1 index 相当于MySQL的表 elasticsearch 没有库的概念 也没有用户的权限区分概念 所以做好 备份 每个
  • android和harmonyos对比,HarmonyOS和Android深度对比

    HarmonyOS APP 工程结构 HarmonyOS应用发布形态为APP Pack Application Package 简称APP 它是由一个或多个HAP HarmonyOS Ability Package 包以及描述APP Pac
  • k8s Failed to create pod sandbox错误处理

    错误信息 Failed to create pod sandbox rpc error code Unknown desc failed to get sandbox image k8s gcr io pause 3 2 failed to
  • 华为机试 统计字符串中最长的数字串及统计字符串中字母出现最多的次数

    不多说 上代码 package com it thread import java util public class SoftTest public static void main String args Scanner sc new
  • 无法验证驱动程序的签名_无法安装最新版NVIDIA显卡驱动,从技术角度该怎么办?...

    一定会有众多网友 饱受无法更新NVIDIA驱动的困扰 你们一定也很奇怪 我凭实力从正规渠道购买的NVIDIA板卡 凭什么无法及时安装NVIDIA官网提供的驱动程序呢 因为无法更新到413以后的版本 一定也有众多因驱动程序 过时 而被 战地五
  • ACM-Java输入输出基本操作

    一 Java之ACM注意点 1 类名称必须采用public class Main方式命名 2 在有些OJ系统上 即便是输出的末尾多了一个 程序可能会输出错误 所以在我看来好多OJ系统做的是非常之垃圾 3 有些OJ上的题目会直接将OI上的题目
  • Framework层Android4.4锁屏流程分析

    前段时间刚接触到锁屏 我们自己做的锁屏时通过底层通过反射调过去的 所以还是得从framewoke层的启动和加载开始分析 所以画了一下这样的两个图 前面一个图是系统开机调到锁屏的一个流程 后面一个图我分开来画了 一个是按power键灭屏和亮屏
  • 【翻译】#拥抱行动和心理安全--思考根本原因而非根本人物

    本杰明 富兰克林曾经说过 生命中唯一的两个确定性是死亡和税收 但是 如果他是一名工程师 他可能会在这个名单上加上另一个 即故障 脸书的工程师们无疑会同意最近的故障 似乎是由于运行一个命令 无意中关闭了他们骨干网络的所有连接 不仅关闭了脸书
  • 【今日CV 计算机视觉论文速览 第149期】Tue, 30 Jul 2019

    今日CS CV 计算机视觉论文速览 Tue 30 Jul 2019 Totally 77 papers 上期速览 更多精彩请移步主页 Interesting MaskGAN人脸属性操作的新方法 为了克服先前方法受限于预定义的有限人脸特征操作
  • flutter 插件

    一 简介 Flutter 中调用这些能力就必须和原生平台进行通信 目前Flutter 已经支持 iOS Android Web macOS Windows Linux等众多平台 要调用特定平台 API 就需要写插件 插件是一种特殊的包 和纯
  • LeetCode234:回文链表

    题目描述 题目链接 请判断一个链表是否为回文链表 示例 1 输入 1 gt 2 输出 false 示例 2 输入 1 gt 2 gt 2 gt 1 输出 true 进阶 你能否用 O n 时间复杂度和 O 1 空间复杂度解决此题 解题思路
  • 贪吃蛇实验报告

    贪吃蛇实验报告 第一次写博客 这是中山大学软件工程导论的项目之一 对初学者可能有点难度 分享出来做参考 使用的C语言 如果你喜欢的话可以使用 就这样 直接上代码 智能蛇部分也发上来 include
  • 实现二维数组或多维数组排序得方法

    例 对数组 3 2 6 2 3 6 3 4 5 3 进行排序 方法一 import numpy as np a np array 3 2 6 2 3 6 3 4 5 3 ind np lexsort a 1 a 0 print a ind