您如何构造适合于numpy排序的数组?
我需要同时对两个数组进行排序,或者我需要对其中一个数组进行排序,并在进行排序时将其关联数组的相应元素也带进去。 那就是如果数组是[(5,33),(4,44),(3,55)]并且我按第一个轴排序(标记为dtype ='alpha'下面),那么我想要:[(3.0,55.0 )(4.0,44.0)(5.0,33.0)]。 这些都是非常大的数据集,在执行其他一些操作之前,我需要先排序(对于nlog(n)speed)。 我不知道如何以适当的方式合并两个单独的数组以使排序算法正常工作。 我认为我的问题很简单。 我尝试了三种不同的方法:
import numpy
x=numpy.asarray([5,4,3])
y=numpy.asarray([33,44,55])dtype=[('alpha',float), ('beta',float)]values=numpy.array([(x),(y)])
values=numpy.rollaxis(values,1)
#values = numpy.array(values, dtype=dtype)
#a=numpy.array(values,dtype=dtype)
#q=numpy.sort(a,order='alpha')
print "Try 1:\n", valuesvalues=numpy.empty((len(x),2))
for n in range (len(x)):values[n][0]=y[n]values[n][1]=x[n]
print "Try 2:\n", values
#values = numpy.array(values, dtype=dtype)
#a=numpy.array(values,dtype=dtype)
#q=numpy.sort(a,order='alpha')###
values = [(x[0], y[0]), (x[1],y[1]) , (x[2],y[2])]
print "Try 3:\n", values
values = numpy.array(values, dtype=dtype)
a=numpy.array(values,dtype=dtype)
q=numpy.sort(a,order='alpha')print "Result:\n",q
我注释了第一次和第二次尝试,因为它们会产生错误,我知道第三次尝试会起作用,因为这与我在RTFM时所看到的情况相似。 给定数组x和y(它们非常大,仅显示示例),如何构造numpy.sort可以正确调用的数组(称为值)?
*** Zip效果很好,谢谢。 额外的问题:以后如何将已排序的数据再次解压缩为两个数组?
#1楼
西蒙建议使用argsort作为替代方法。 我建议将其作为一种方法。 不会出现混乱的合并,压缩或解压缩:只需按索引访问即可。
idx = numpy.argsort(x)
ans = [ (x[idx[i]],y[idx[i]]) for i in idx]
#2楼
zip()
对于大型数组可能效率不高。 可以使用numpy.dstack()
代替zip
:
ndx = numpy.argsort(x)
values = numpy.dstack((x[ndx], y[ndx]))
#3楼
我认为您只需要指定制作最终ndarray时要排序的轴即可。 或者,对原始数组之一进行argsort,您将拥有一个索引数组,可用于在x和y中查找,这可能意味着您根本不需要任何值。
(scipy.org目前似乎无法访问,否则我会向您发布一些文档的链接)
鉴于您的描述与您的代码片段不太匹配,因此很难确定地说,但是我认为您使numpy数组的创建过于复杂。
#4楼
我认为您想要的是zip功能。 如果你有
x = [1,2,3]
y = [4,5,6]
然后zip(x,y) == [(1,4),(2,5),(3,6)]
所以你的数组可以用
a = numpy.array(zip(x,y), dtype=dtype)
#5楼
我无法使用Numpy的sort
函数获得有效的解决方案,但是还有其他可行的方法:
import numpy
x = [5,4,3]
y = [33,44,55]
r = numpy.asarray([(x[i],y[i]) for i in numpy.lexsort([x])])
lexsort
返回数组索引的排列,该排列将行按排序顺序排列。 如果要对多个键(例如,按x
然后按y
对结果进行排序,请改用numpy.lexsort([x,y])
。
#6楼
关于您的奖金问题-zip实际上也可以解压缩:
In [1]: a = range(10)
In [2]: b = range(10, 20)
In [3]: c = zip(a, b)
In [4]: c
Out[4]:
[(0, 10),(1, 11),(2, 12),(3, 13),(4, 14),(5, 15),(6, 16),(7, 17),(8, 18),(9, 19)]
In [5]: d, e = zip(*c)
In [6]: d, e
Out[6]: ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9), (10, 11, 12, 13, 14, 15, 16, 17, 18, 19))
您如何构造适合于numpy排序的数组?相关推荐
- [转载] 05 Numpy排序搜索计数及集合操作
参考链接: Numpy 排序,搜索和计数 排序,搜索和计数 排序 numpy.sort() numpy.sort(a[, axis=-1, kind='quicksort', order=None]) ...
- 快速排序 python菜鸟教程-NumPy 排序、条件刷选函数
NumPy 排序.条件刷选函数 NumPy 提供了多种排序的方法. 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性. 下表显示了三种排序算法 ...
- Numpy 排序 -- sort()、argsort()
Numpy 排序 – sort().argsort() 官方文档 1.内容排序:sort() 函数原型: 对数组本身进行排序 numpy.sort(a, axis=-1, kind='quicksor ...
- Python中的Numpy(5.numpy排序)
1.ndarray的排序 '''1.排序''' n1 = np.array([2, 5, 1, 7, 4]) print(n1)def sortn(nd): # 自己写出冒泡排序的算法for i in ...
- python数组排序-python - 按列在NumPy中对数组进行排序
python - 按列在NumPy中对数组进行排序 如何在第n列中对NumPy中的数组进行排序? 例如, a = array([[9, 2, 3], [4, 5, 6], [7, 0, 5]]) 我想 ...
- 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算
第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说,用numpy的主要目的在于应用矢量化运算.Numpy并没有多么高级的数据分析功能,理解Numpy ...
- 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)
常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...
- Python数据分析学习四 NumPy基础:数组和矢量计算
Python数据分析学习系列四NumPy基础:数组和矢量计算 资料转自(GitHub地址):https://github.com/wesm/pydata-book 有需要的朋友可以自行去github下 ...
- 【Python】Numpy基础:数组和矢量运算
Numpy基础:数组和矢量运算 目录: 文章目录 一 Numpy及其重要性 二 ndarray:一种多维数组对象 1 创建ndarray 2 ndarray的数据类型 3 数组和标量之间的运算 4 基 ...
最新文章
- mysql font zhushi_关于在mysql front中使用注释符报错的问题
- 重磅直播 | 室内动态变化场景中的相机重定位(CVPR2021)
- Validation-jQuery表单验证插件使用方法
- Apache开启Gzip压缩技术,加快网页访问速度
- 自然语言处理之长短时记忆网络(六)
- 国家开放大学2021春1087数学分析专题研究题目
- go设计模式思维导图
- 软件架构设计的三个维度,软件架构师需要知道的点,了解一下吧!
- 史上最牛研究生已成院士,给出“维持科研创新能力”的秘诀
- 完美解决Mac电脑睡眠之后苹果电脑没有声音的方法
- AutoLISP绘制圆DCL对话框
- linux网络日志文件,系统日志文件 进程配置文件 进程信息文件 网络连接文件
- android dialog内嵌listview样式,android 開發dialog 嵌套listview布局
- 推荐系统模型之: 基于层次表示自动聚合的 CVR 预估模型
- QT之Win10安装(五)
- android122 zhihuibeijing 新闻中心NewsCenterPager加载网络数据实现
- 360驱动大师 2.0.0.1750 去广告去多余图标优化版(安装版 + 单文件版 + 网卡版)
- JSP实战项目教程|基于JSP的学生请假系统开发视频教程
- H5拖拽方法drag在VUE中的应用实例
- 家里两台电脑怎么共享文件_家里两台电脑怎么共享文件
热门文章
- [数据结构复习]B树B+树
- 博科交换机zone划分
- 167. Two Sum II - Input array is sorted两数之和
- C# 代码生成器 (存储过程生成方法)
- Java并发编程 ReentrantLock 源码分析
- MVC3.0 如何点击点击一张图片连接到另一地址
- HP服务器集成 iLO 端口的配置
- Zabbix自带模板监控MySQL服务
- 常用的Linux命令组合
- failed to accept an incoming connection: connection from 192.168.1.114 rejected, allowed hosts: 1