- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 argsort 函数对 numpy 数组进行排序。
不幸的是,这不起作用,我不明白为什么 :(
代码是:
import numpy as np
distance = np.array([38.26, 33.01, 32.33, 30.77, 37.96, 44.37, 32.72, 36.56,
27.77, 33.62, 42.85, 34.6 , 32.04, 27.49, 49.64, 51.85,
44.37, 38.26, 46.93, 40.45, 40.72, 39.7 , 34.12, 36.9 ,
34.6 , 34. , 36.56, 39.29, 38.6 , 32.33, 32.65, 40.72,
43.85, 47.89, 33.62, 35.24, 42.5 , 36.97, 28.36, 37.57,
37.25, 25.54, 29.6 , 37.25, 40.45, 32.04, 40.45, 31.4 ,
41.78, 35.89, 59.24, 51.2 , 57.22, 35.54, 50.09, 40.33,
50.58, 29.77, 51.97, 34.33, 29. , 43.81, 40.84, 45.62,
39.77, 54.5 , 40.36, 40.93, 43.28, 37.61, 45.05, 45.05,
45.94, 45.05, 49.37, 52.56, 54.08, 53.89, 44.41, 39.25,
36.01, 36.01, 40.93, 43.29, 38.16, 47.56, 54.5 , 44.98,
40.36, 36.5 , 37.01, 46.21, 40.4 , 30.29, 38.65, 41.49,
40.9 , 46.85, 32.26, 40.33, 50.58, 40.93, 59.41, 48.1 ,
51.25, 66.76, 30.26, 61.7 , 51.14, 64.8 , 52.49, 48.25,
55.24, 38.74, 41.48, 51.2 , 51.25, 73.73, 66.05, 40.84,
57.85, 39.2 , 67.13, 46.98, 55.78, 62.08, 46.28, 46.21,
48.8 , 60.84, 62.6 , 76.85, 48.8 , 47.53, 43.97, 68.29,
51.25, 50.57, 45. , 57.22, 54.5 , 57.22, 40.93, 56.48,
55.78, 53.89, 45.94, 51.25, 50. , 43.81])
为了调试它,我将距离数组与 argsort 一起打印:
print np.array(zip(distance, distance.argsort()))
我得到的是这个。它看起来不对,因为例如 30.77 小于 32.33,但 32.33 标记为 8,30.77 标记为 38。我做错了什么?
[[ 38.26 41. ]
[ 33.01 13. ]
[ 32.33 8. ]
[ 30.77 38. ]
[ 37.96 60. ]
[ 44.37 42. ]
[ 32.72 57. ]
[ 36.56 106. ]
[ 27.77 93. ]
[ 33.62 3. ]
[ 42.85 47. ]
[ 34.6 45. ]
[ 32.04 12. ]
[ 27.49 98. ]
[ 49.64 2. ]
[ 51.85 29. ]
[ 44.37 30. ]
[ 38.26 6. ]
[ 46.93 1. ]
[ 40.45 9. ]
[ 40.72 34. ]
[ 39.7 25. ]
[ 34.12 22. ]
[ 36.9 59. ]
[ 34.6 24. ]
[ 34. 11. ]
[ 36.56 35. ]
[ 39.29 53. ]
[ 38.6 49. ]
[ 32.33 80. ]
[ 32.65 81. ]
[ 40.72 89. ]
[ 43.85 26. ]
[ 47.89 7. ]
[ 33.62 23. ]
[ 35.24 37. ]
[ 42.5 90. ]
[ 36.97 43. ]
[ 28.36 40. ]
[ 37.57 39. ]
[ 37.25 69. ]
[ 25.54 4. ]
[ 29.6 84. ]
[ 37.25 0. ]
[ 40.45 17. ]
[ 32.04 28. ]
[ 40.45 94. ]
[ 31.4 113. ]
[ 41.78 121. ]
[ 35.89 79. ]
[ 59.24 27. ]
[ 51.2 21. ]
[ 57.22 64. ]
[ 35.54 99. ]
[ 50.09 55. ]
[ 40.33 88. ]
[ 50.58 66. ]
[ 29.77 92. ]
[ 51.97 46. ]
[ 34.33 44. ]
[ 29. 19. ]
[ 43.81 20. ]
[ 40.84 31. ]
[ 45.62 62. ]
[ 39.77 119. ]
[ 54.5 96. ]
[ 40.36 67. ]
[ 40.93 101. ]
[ 43.28 142. ]
[ 37.61 82. ]
[ 45.05 114. ]
[ 45.05 95. ]
[ 45.94 48. ]
[ 45.05 36. ]
[ 49.37 10. ]
[ 52.56 68. ]
[ 54.08 83. ]
[ 53.89 149. ]
[ 44.41 61. ]
[ 39.25 32. ]
[ 36.01 134. ]
[ 36.01 5. ]
[ 40.93 16. ]
[ 43.29 78. ]
[ 38.16 87. ]
[ 47.56 138. ]
[ 54.5 73. ]
[ 44.98 71. ]
[ 40.36 70. ]
[ 36.5 63. ]
[ 37.01 146. ]
[ 46.21 72. ]
[ 40.4 127. ]
[ 30.29 91. ]
[ 38.65 126. ]
[ 41.49 97. ]
[ 40.9 18. ]
[ 46.85 123. ]
[ 32.26 133. ]
[ 40.33 85. ]
[ 50.58 33. ]
[ 40.93 103. ]
[ 59.41 111. ]
[ 48.1 132. ]
[ 51.25 128. ]
[ 66.76 74. ]
[ 30.26 14. ]
[ 61.7 148. ]
[ 51.14 54. ]
[ 64.8 137. ]
[ 52.49 100. ]
[ 48.25 56. ]
[ 55.24 108. ]
[ 38.74 115. ]
[ 41.48 51. ]
[ 51.2 104. ]
[ 51.25 136. ]
[ 73.73 116. ]
[ 66.05 147. ]
[ 40.84 15. ]
[ 57.85 58. ]
[ 39.2 110. ]
[ 67.13 75. ]
[ 46.98 145. ]
[ 55.78 77. ]
[ 62.08 76. ]
[ 46.28 65. ]
[ 46.21 140. ]
[ 48.8 86. ]
[ 60.84 112. ]
[ 62.6 144. ]
[ 76.85 124. ]
[ 48.8 143. ]
[ 47.53 139. ]
[ 43.97 141. ]
[ 68.29 52. ]
[ 51.25 120. ]
[ 50.57 50. ]
[ 45. 102. ]
[ 57.22 129. ]
[ 54.5 107. ]
[ 57.22 125. ]
[ 40.93 130. ]
[ 56.48 109. ]
[ 55.78 118. ]
[ 53.89 105. ]
[ 45.94 122. ]
[ 51.25 135. ]
[ 50. 117. ]
[ 43.81 131. ]]
最佳答案
distance.argsort()
返回索引数组。 ith<
索引不会告诉您 distance
中第 ith<
元素的排名。相反,ith<
索引告诉您排序数组中的 ith<
元素是 distance[i]
。
换句话说,
idx = distance.argsort()
assert (distance[idx] == np.sort(distance)).all()
考虑这个小例子 from the docs :
In [236]: x = np.array([3, 1, 2])
In [237]: np.argsort(x)
Out[237]: array([1, 2, 0])
In [238]: x[np.argsort(x)]
Out[238]: array([1, 2, 3])
In [239]: x[1], x[2], x[0]
Out[239]: (1, 2, 3)
两次调用 argsort
确实可以得到 distance
中第 ith<
元素的排名:
In [240]: np.argsort(np.argsort(x))
Out[240]: array([2, 0, 1])
了解其工作原理可以很好地测试您对 argsort
的理解。但是,调用 argsort
两次来查找排名是低效的。特别是对于较大的阵列 there are other, faster, ways找到排名。
关于python - Numpy.argsort - 看不出有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31910407/
我正在处理一组标记为 160 个组的 173k 点。我想通过合并最接近的(到 9 或 10 个组)来减少组/集群的数量。我搜索过 sklearn 或类似的库,但没有成功。 我猜它只是通过 knn 聚类
我有一个扁平数字列表,这些数字逻辑上以 3 为一组,其中每个三元组是 (number, __ignored, flag[0 or 1]),例如: [7,56,1, 8,0,0, 2,0,0, 6,1,
我正在使用 pipenv 来管理我的包。我想编写一个 python 脚本来调用另一个使用不同虚拟环境(VE)的 python 脚本。 如何运行使用 VE1 的 python 脚本 1 并调用另一个 p
假设我有一个文件 script.py 位于 path = "foo/bar/script.py"。我正在寻找一种在 Python 中通过函数 execute_script() 从我的主要 Python
这听起来像是谜语或笑话,但实际上我还没有找到这个问题的答案。 问题到底是什么? 我想运行 2 个脚本。在第一个脚本中,我调用另一个脚本,但我希望它们继续并行,而不是在两个单独的线程中。主要是我不希望第
我有一个带有 python 2.5.5 的软件。我想发送一个命令,该命令将在 python 2.7.5 中启动一个脚本,然后继续执行该脚本。 我试过用 #!python2.7.5 和http://re
我在 python 命令行(使用 python 2.7)中,并尝试运行 Python 脚本。我的操作系统是 Windows 7。我已将我的目录设置为包含我所有脚本的文件夹,使用: os.chdir("
剧透:部分解决(见最后)。 以下是使用 Python 嵌入的代码示例: #include int main(int argc, char** argv) { Py_SetPythonHome
假设我有以下列表,对应于及时的股票价格: prices = [1, 3, 7, 10, 9, 8, 5, 3, 6, 8, 12, 9, 6, 10, 13, 8, 4, 11] 我想确定以下总体上最
所以我试图在选择某个单选按钮时更改此框架的背景。 我的框架位于一个类中,并且单选按钮的功能位于该类之外。 (这样我就可以在所有其他框架上调用它们。) 问题是每当我选择单选按钮时都会出现以下错误: co
我正在尝试将字符串与 python 中的正则表达式进行比较,如下所示, #!/usr/bin/env python3 import re str1 = "Expecting property name
考虑以下原型(prototype) Boost.Python 模块,该模块从单独的 C++ 头文件中引入类“D”。 /* file: a/b.cpp */ BOOST_PYTHON_MODULE(c)
如何编写一个程序来“识别函数调用的行号?” python 检查模块提供了定位行号的选项,但是, def di(): return inspect.currentframe().f_back.f_l
我已经使用 macports 安装了 Python 2.7,并且由于我的 $PATH 变量,这就是我输入 $ python 时得到的变量。然而,virtualenv 默认使用 Python 2.6,除
我只想问如何加快 python 上的 re.search 速度。 我有一个很长的字符串行,长度为 176861(即带有一些符号的字母数字字符),我使用此函数测试了该行以进行研究: def getExe
list1= [u'%app%%General%%Council%', u'%people%', u'%people%%Regional%%Council%%Mandate%', u'%ppp%%Ge
这个问题在这里已经有了答案: Is it Pythonic to use list comprehensions for just side effects? (7 个答案) 关闭 4 个月前。 告
我想用 Python 将两个列表组合成一个列表,方法如下: a = [1,1,1,2,2,2,3,3,3,3] b= ["Sun", "is", "bright", "June","and" ,"Ju
我正在运行带有最新 Boost 发行版 (1.55.0) 的 Mac OS X 10.8.4 (Darwin 12.4.0)。我正在按照说明 here构建包含在我的发行版中的教程 Boost-Pyth
学习 Python,我正在尝试制作一个没有任何第 3 方库的网络抓取工具,这样过程对我来说并没有简化,而且我知道我在做什么。我浏览了一些在线资源,但所有这些都让我对某些事情感到困惑。 html 看起来
我是一名优秀的程序员,十分优秀!