Numpy 数组复合排序——mX4列,根据多列组合排序

2023-10-30

Numpy 数组复合排序——mX4列,根据多列组合排序

一、 Numpy 仅根据某列对 array(mX4)整体排序用argsort

import numpy as np

data = np.array([[1, 5, 2, 4, 10], [9, 6, 8, 4, 5], [2, 3, 4, 6, 3], [7, 6, 8, 4, 6]])
print(' before---- ')
print(data)
data = data[data[:, 0].argsort()]
print('根据第1列排序 after: ')
print(data)

运行结果:
在这里插入图片描述

二、mX4根据多列组合排序(先根据x排序,x相同根据y排序,y相同根据z排序)

分以下三步进行,源代码见底部:

  1. np array(array) 转array(tuple) [(1,2,3,4),(5,6,7,8),…] ----> [(1,2,3,4),(5,6,7,8),…]
m2A = []
    for i in range(0, len(inFile)):
        m2A.append((inFile[i][0], inFile[i][1], inFile[i][2], inFile[i][3]))
  1. np 对array(tuple) 进行 多列组合排序(先根据x排序,再根据y排序,再根据z排序) m2A: [(1,2,3,4),(5,6,7,8),…]
dtype = [('x', float), ('y', float), ('z', float), ('i', int)]
tuple1 = np.array(m2A, dtype)
tuple1 = np.sort(tuple1, order=['x', 'y', 'z'])
  1. np array(tuple) 转 array(array)

    该过程包括俩步:
    (1) np array 递归转为 tuple [(1,2,3,4),(5,6,7,8),…] ----> ((1,2,3,4),(5,6,7,8),…)
    (2) np tuple 转 array [(1,2,3,4),(5,6,7,8),…] —> [[1,2,3,4],[5,6,7,8],…]

inFile = np.array(totuple(tuple1))   # 先整体转为元组,再转多维数组
import numpy as np

np.set_printoptions(suppress=True)

def totuple(a):
    try:
        return tuple(totuple(i) for i in a)
    except TypeError:
        return a

data = np.array([[423999.72382051, 4421127.27096031, 83.313, 7.],
                  [423993.12782051, 4421123.49396031, 83.276, 23.],
                  [423993.05882051, 4421122.56596031, 84.28, 82.],
                  [423992.95382051, 4421123.20896031, 83.293, 15.],
                  [423993.08082051, 4421122.47896031, 84.429, 100.]])

print('排序前: ',data.shape,data)

m2A = []
for i in range(0, len(data)):
    m2A.append((data[i][0], data[i][1], data[i][2], data[i][3]))

dtype = [('x', float), ('y', float), ('z', float), ('i', int)]
tuple1 = np.array(m2A, dtype)
tuple1 = np.sort(tuple1, order=['x', 'y', 'z'])
print(tuple1.shape)

inFile = np.array(totuple(tuple1))   # 转为元组,转array

print('排序后:', data)

在这里插入图片描述

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

Numpy 数组复合排序——mX4列,根据多列组合排序 的相关文章

随机推荐

  • java nio 编程

    转自 http yangguangfu iteye com blog 774194 Java代码 晚上学习了下Java 的 NIO Socket编程 写了下面这个小程序 包括服务器端与客户端 实现的功能为客户端向服务器端发送随即数目的消息
  • Java Executors(线程池)

    Sun在Java5中 对Java线程的类库做了大量的扩展 其中线程池就是Java5的新特征之一 除了线程池之外 还有很多多线程相关的内容 为多线程的编程带来了极大便利 为了编写高效稳定可靠的多线程程序 线程部分的新增内容显得尤为重要 有关J
  • PHP学习记录--基础篇

    目录 一 变量定义 二 循环结构 三 函数 四 文件加载原理 五 错误处理 六 字符串 七 数组 一 变量定义
  • C进阶之实现数据库(mysql 5.0)版本通讯录

    前言 断断续续历时两天百度的知识探索 继静态 动态 文件版本的通讯录之后 倔强的我开启了数据库版本通讯录 在动态版本通讯录的基础上将通讯人信息数据插入数据库中 初始化通讯录完成后 再从数据库中查询通讯人信息数据 的痛苦长路 想说脏话但是稍微
  • 在九天毕昇平台运行paddle出现fatal error: ‘Segmentation fault‘ is detected by the operating system

    我在九天毕昇平台使用paddlepaddle框架训练实例时 调用GPU出现下文错误 C Traceback most recent call last No stack trace in paddle may be caused by ex
  • SQL查询结果去重

    SQL查询结果去重 使用distinct关键字 去除重复的记录行 SELECT loc FROM dept SELECT DISTINCT loc FROM dept 案例 描述 题目 现在运营需要查看用户来自于哪些学校 请从用户信息表中取
  • opengl 光线追踪_基于CUDA的GPU光线追踪

    先放最终效果 实时光线追踪https www zhihu com video 1073144630408941568 十天前我打算用我之前的CPU渲染器渲染一张博客封面 大概是这张 我之前的渲染器是使用C 写的 已经进行过多线程优化 但是为
  • H5页面怎么跳转到公众号主页?看过来

    前言 做公众号开发的小伙伴 可能会遇到这种需求 在一个H5页面点击一个关注公众号按钮跳转到公众号主页 听到这个需求的一瞬间 疑惑了 这不可能 摸了摸高亮的额头 没办法 做还是要做的 开始上解决方案 方案一 自己做一个关注公众号的引导页面 让
  • 【Node.js项目】大事件项目:后台架构图(含具体技术栈)、典型代码

    项目学习自 https www bilibili com video BV1a34y167AZ 文章目录 1 项目后台架构图 含具体技术栈 2 项目目录结构 3 项目典型代码 config config js app js schema u
  • docker进阶笔记(高级版)

    1 mysql主从复制 mysql master 新建mysql master容器 docker run d p 3307 3306 privileged true v Users yaoqiang app data mysql maste
  • Unity:Quaternion类(四元数)

    Unity Quaternion 四元数 一 四元数理解 四元数左乘向量 表示将该向量按照四元数表示的角度旋转 例如 Vector3 point new Vector3 0 0 10 Vector3 newPoint Quaternion
  • 微信小程序中图片占满整个屏幕实现方法

    将body和html设置为100 这样我们就可以在他们的子元素中使用height 100 来使的我们的容器元素占满屏幕的高度啦 但是在微信小程序中 是没有dom对象的 根节点是page 使用page height 100 果然 是可行的 高
  • C/C++实现快速排序(两种方式)

    介绍 快速排序是对冒泡排序算法的一种改进 快速排序算法通过多次比较和交换来实现排序 流程如下 图片来自百度 实现 以下有两种实现方式 说是两种 其实就是在交换元素时具体细节上有点不同罢了 方式一 int Partition int A in
  • Spring的RestTemplate是什么东西?它有什么作用?

    RestTemplate是Spring提供的一个服务之间请求的工具 并且可以自动实现json的序列化和反序列化
  • pycharm导包不成功,如何清缓存,设置源目录

    pycharm导入本地包不成功 解决方法 1 清缓存 2 pycharm设置源目录
  • 中心化(又叫零均值化)和标准化(又叫归一化)

    一 中心化 又叫零均值化 和标准化 又叫归一化 概念及目的 1 在回归问题和一些机器学习算法中 以及训练神经网络的过程中 通常需要对原始数据进行中心化 Zero centered或者Mean subtraction subtraction表
  • pid双闭环matlab仿真,SPWM波控制单相逆变器双闭环PID调节器的Simulink建模与仿真

    随着电力行业的快速发展 逆变器的应用越来越广泛 逆变器的好坏会直接影响整个系统的逆变性能和带载能力 逆变器的控制目标是提高逆变器输出电压的稳态和动态性能 稳态性能主要是指输出电压的稳态精度和提高带不平衡负载的能力 动态性能主要是指输出电压的
  • 计算机网络复习-习题整理(三) 物理层

    1 对于带宽为4KHz的信道 若用8种不同的物理状态来表示数据 信噪比为30db 试问按奈奎斯特定理 最大限制的数据速率是多少 按香农定理最大限制的数据速率是多少 正确答案 按奈奎斯特定理 C 2W log2N N 8 W 4KHZ C 2
  • spring AOP实现后端日志操作记录功能

    一 引入配置文件
  • Numpy 数组复合排序——mX4列,根据多列组合排序

    Numpy 数组复合排序 mX4列 根据多列组合排序 一 Numpy 仅根据某列对 array mX4 整体排序用argsort import numpy as np data np array 1 5 2 4 10 9 6 8 4 5 2