python – 在R和Numpy中排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 在R和Numpy中排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1377字,纯文字阅读大概需要2分钟。
内容图文
![python – 在R和Numpy中排序](/upload/InfoBanner/zyjiaocheng/747/dee3738af0144b8d93f84dff3de5f913.jpg)
我试图将一些R代码转换为numpy.我有一个矢量如下:
r=[2.00000
1.64000
1.36000
1.16000
1.04000
1.00000
1.64000
1.28000
1.00000
0.80000
0.68000
0.64000
1.36000
1.00000
0.72000
0.52000
0.40000
0.36000
1.16000
0.80000
0.52000
0.32000
0.20000
0.16000
1.04000
0.68000
0.40000
0.20000
0.08000
0.04000
1.00000
0.64000
0.36000
0.16000
0.04000
0.00000]
我正在尝试转换以下R代码
index <- order(r)
通过以下代码进入numpy
index = np.argsort(r)
结果如下
NumPy的
index=array([35, 29, 34, 28, 33, 23, 27, 22, 21, 32, 17, 16, 26, 15, 20, 11, 31,25, 10, 14, 9, 19, 30, 5, 8, 13, 4, 24, 18, 3, 7, 12, 2, 6, 1, 0])
[R
index= [36 30 35 29 24 34 23 28 22 18 33 17 27 16 21 12 32 11 26 15 10 20 6 9 14 31 5 25 4 19 8 3 13 2 7 1]
如您所见,结果不同.如何在numpy中获得R的结果
解决方法:
看一下order的文档,看起来r对短向量使用基数排序,这确实是一种稳定的排序.另一方面,argsort默认使用快速排序,这不是一个稳定的排序,并且不保证连接与原始阵列的顺序相同.
但是,您可以通过指定kind标志来使用带argsort的稳定排序:
np.argsort(r, kind='stable')
当我在向量上使用稳定排序时:
array([35, 29, 34, 28, 23, 33, 22, 27, 21, 17, 32, 16, 26, 15, 20, 11, 31,
10, 25, 14, 9, 19, 5, 8, 13, 30, 4, 24, 3, 18, 7, 2, 12, 1,
6, 0], dtype=int64)
与r结果相比(减去索引差异的一个):
np.array_equal(np.argsort(r, kind='stable'), r_out - 1)
True
一句警告:看来r在某些条件下切换到shell排序(我不太了解r给出更详细的说明),但shell排序不稳定.如果满足这些条件,这将是您必须解决的问题.
内容总结
以上是互联网集市为您收集整理的python – 在R和Numpy中排序全部内容,希望文章能够帮你解决python – 在R和Numpy中排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。