当前位置: 首页 > 面试题库 >

用于多维ndarray的argsort

柳奇思
2023-03-14
问题内容

我正在尝试获取索引以按最后一个轴对多维数组进行排序,例如

>>> a = np.array([[3,1,2],[8,9,2]])

我想要这样的索引i

>>> a[i]
array([[1, 2, 3],
       [2, 8, 9]])

根据numpy.argsort的文档,我认为应该执行此操作,但出现错误:

>>> a[np.argsort(a)]
IndexError: index 2 is out of bounds for axis 0 with size 2

编辑:我需要重新排列相同形状的其它阵列(例如阵列b,使得a.shape == b.shape以相同的方式)…以便

>>> b = np.array([[0,5,4],[3,9,1]])
>>> b[i]
array([[5,4,0],
       [9,3,1]])

问题答案:

上面的答案现在已经过时了,因为在numpy
1.15中添加了新功能以使其更简单。take_along_axis(https://docs.scipy.org/doc/numpy-1.15.1/reference/generation/numpy.take_along_axis.html)允许您执行以下操作:

>>> a = np.array([[3,1,2],[8,9,2]])
>>> np.take_along_axis(a, a.argsort(axis=-1), axis=-1)
array([[1 2 3]
       [2 8 9]])


 类似资料:
  • 问题内容: 我有一个4-D NumPy数组,轴说x,y,z,t。我想取对应于t = 0的切片,并在y轴上排列顺序。 我有以下 我得到(5,4,3)而不是(4,5,3)。 我何时输入 我得到了预期的(4,5,3)。有人可以解释为什么第一个版本交换前两个维度吗? 问题答案: 正如@hpaulj在评论中提到的,此行为是由于 混合了基本切片 和 高级索引: 在上面的代码片段中,发生了以下情况: 当我们沿最

  • 问题内容: 我的动机是利用熊猫功能来进行滚动多因素回归(这个问题是 不是 关于滚动多因素回归)。我希望我可以在a之后使用,并使用所得结果提取ndarray并执行必要的矩阵乘法。那样行不通。 这是我发现的: 对象是什么样的: 矩阵乘法的行为正常: 使用Apply执行逐行点积的行为符合预期: Groupby-> Apply的行为符合我的预期: 但是当我跑步时: 我得到: AttributeError:

  • NumPy中定义的最重要的对象是名为ndarray的N维数组类型。 它描述了相同类型的项目集合。 可以使用从零开始的索引访问集合中的项目。 ndarray中的每个项目在内存中占用相同大小的块。 ndarray中的每个元素都是数据类型对象的对象(称为dtype )。 从ndarray对象中提取的任何项(通过切片)由一个数组标量类型的Python对象表示。 下图显示了ndarray,数据类型对象(dt

  • 问题内容: 使用一段时间后,我真的很喜欢Numpy多维数组。用简洁而易读且相当通用的代码编写算法会很有帮助。我希望在Java中也有同样的事情。在自己使用类似Numpy的API编写多维数组之前,已经有这样的东西吗? [PS]我搜索了一下,没看到 问题答案: 因此,最接近的比赛似乎是柯尔特!http://acs.lbl.gov/software/colt/ 它具有多维数组对象,数组视图和通常的线性代数

  • 以下是例外的结果: null

  • 本小节将详述如何创建 ndarray 对象,以及如何创建特殊的 ndarray 对象。 1. ndarray 对象 ndarray,也就是我们常用的 N 维数组对象,是 Numpy 最核心的组成部分。你可以把它视为一个快速而灵活的大数据集容器,利用这种数组你可以便捷地执行一些数学运算。 ndarray 有两个显著特点: ndarray 是一个通用的同构数据多维容器,也就是说,该容器中的每一个元素都