- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想根据之前处理过的引用数组对 numpy 二维数组进行排序。我的想法是存储我的引用数组的 numpy.argsort
输出并使用它对其他数组进行排序:
In [13]: # my reference array
...: ref_arr = np.random.randint(10, 30, 12).reshape(3, 4)
Out[14]:
array([[12, 22, 12, 13],
[28, 26, 21, 23],
[24, 14, 16, 25]])
# desired output:
array([[12, 14, 12, 13],
[24, 22, 16, 23],
[28, 26, 21, 25]])
我尝试过的:
In [15]: # store the sorting matrix
...: sm = np.argsort(ref_arr, axis=0)
Out[16]:
array([[0, 2, 0, 0],
[2, 0, 2, 1],
[1, 1, 1, 2]])
但不幸的是,最后一步只适用于一维数组:
In [17]: ref_arr[sm]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-17-48b785178465> in <module>()
----> 1 ref_arr[sm]
IndexError: index 3 is out of bounds for axis 0 with size 3
我找到了这个 Github issue这是针对此问题创建的,但不幸的是,通过提及我尝试的仅适用于一维数组的方法解决了该问题。 🙄
In a comment to this issue提到了一个与我的问题类似的例子。该代码段没有解决我的问题,因为它按行 而非列 对数组进行排序。但它暗示了我必须朝哪个方向移动...
a[np.arange(np.shape(a)[0])[:,np.newaxis], np.argsort(a)]
不幸的是,我对这个例子的理解不够,无法根据我的用例对其进行调整。也许有人可以在这里解释这种高级索引的工作原理?这可能使我能够自己解决问题,但我也不介意交 key 解决方案。 ;)
谢谢。
以防万一:我在 OS X 上使用 Python 3.6.1 和 numpy 1.12.1。
最佳答案
截至 2018 年 5 月,它可以使用 np.take_along_axis
np.take_along_axis(ref_arr, sm, axis=0)
Out[25]:
array([[10, 16, 15, 10],
[13, 23, 24, 12],
[28, 26, 28, 28]])
关于python - 使用 numpy.argsort 的输出对 numpy.ndarray 的每一列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43218594/
因此,它是一种间接排序,它返回对数组进行排序的索引。为什么它是“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
我是一名优秀的程序员,十分优秀!