- 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/
因此,它是一种间接排序,它返回对数组进行排序的索引。为什么它是“argsort”(考虑到它需要一个参数——要使用的排序类型,这是有道理的)而不是“indirect_sort”或类似的东西?还是 get
我有以下数据帧: 用户身份 列_1 列_2 第 3 列 一种 4.959 3.231 1.2356 乙 0.632 0.963 2.4556 C 3.234 7.445 5.3435 D 1.454
我正在纯Python中寻找一个理想的函数,它类似于numpy.argsort,因为它只返回排序索引的列表,同时保持原始数组不变,但它需要能够对多个数组中包含的数据进行排序数组。 示例: >>> nam
所以我有一个二维数组,其中第一列由介于 -1.0 和 1.0 之间的 float 组成。我想根据第一列对数组进行排序,从最低到最高,这样: data[0,data[0,:].argsort()] 但问
考虑以下代码: avgDists = np.array([1, 8, 6, 9, 4]) ids = avgDists.argsort()[:n] 这给了我 n 最小元素的索引。是否可以按降序使用相同
我在使用函数 argsort 对 2D 数组进行排序时遇到以下问题。 更准确地说,假设我有 5 个点,并计算了它们之间的欧氏距离,这些距离存储在二维数组 D 中: D=np.array([[0,0.3
我想我发现了 pandas 中的一个错误。我希望得到一些帮助来验证错误或帮助我找出我的代码中逻辑错误的位置。 我的代码如下: import pandas, numpy, StringIO def sq
所以我有一个数组,例如 [-0.7, -3.7, -2.1, -5.8, -1.2 ]这些特定数字对应于按顺序排列的标签:比如 0.7 对应于标签 201,3.7 对应于标签 202 等等。 正常排序
我正在尝试使用 argsort 函数对 numpy 数组进行排序。 不幸的是,这不起作用,我不明白为什么 :( 代码是: import numpy as np distance = np.array(
最近,我一直在试验 np.argsort,我发现了一些奇怪的东西。 如果你运行下面的代码,你会得到结果: In [0]: np.argsort([3]*16) Out[0]: array([ 0,
np.argsort() 如何处理关系? test = [1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0
这个问题在这里已经有了答案: how to make argsort result to be random between equal values? (2 个答案) 关闭 7 年前。 我有一个
我有一个 numpy 数组: foo = array([3, 1, 4, 0, 1, 0]) 我想要前 3 项。呼唤 foo.argsort()[::-1][:3] 返回 array([2, 0, 4
我有一些代码可以根据二维圆形窗口中的相邻值计算图像中的缺失值。它还使用来自同一位置的一个或多个时间相邻图像的值(即在 3 维中移动的相同 2D 窗口)。 对于每个缺失的位置,我需要计算的值不一定基于整
我有一个数组 [0.2,0,0,0,0.3,0,0,0,0.4]。我正在使用 np.argsort 对值进行排序并获取该索引。 因此,对于我的示例,它将类似于 [1,5,9,2,3,4,6...]。但
假设您有一个 numpy 向量 [0,3,1,1,1] 并且您运行 argsort你会得到 [0,2,3,4,1] 但所有的都是一样的!我想要的是一种洗牌相同值索引的有效方法。知道如何在没有 whil
如果我们有一个一维数组 arr = np.random.randint(7, size=(5)) # [3 1 4 6 2] print np.argsort(arr) # [1 4 0 2 3]
为什么 numpy 会给出这个结果: x = numpy.array([1.48,1.41,0.0,0.1]) print x.argsort() >[2 3 1 0] 当我期望它这样做时: [3 2
给定一个数组 'a' 我想按列对数组进行排序 sort(a, axis=0) 对数组做一些事情,然后撤消排序。我的意思不是重新排序,而是基本上颠倒每个元素的移动方式。我假设 argsort() 是我需
numpy.where() 有两种用法: 1. np.where(condition, x, y) 满足条件(condition),输出x,不满足输出y。 如果是一维数组,相当于[xv if
我是一名优秀的程序员,十分优秀!