python - Numpy 2D 数组沿特定轴由其他 2D 索引

标签 python arrays numpy

我有一个二维数组:

>>> in_arr = np.array([[1,2],[4,3]])
array([[1, 2],
       [4, 3]])

我找到按列排序的索引以生成另一个二维数组:

>>> col_sort = np.argsort(in_arr, axis=1)
array([[0, 1],
       [1, 0]])

我想知道有效的 numpy 切片以第二个索引第一个切片:

>>> redordered_in_arr = np.*SOME_SLICE_METHOD*(in_arr, col_sort, axis=1)
array([[1, 2],
       [3, 4]])

目的是按列对数组执行(更复杂的)函数,例如:

>>> arr_with_function = reordered_in_arr ** np.array([1,2])
array([[1, 4],
       [3, 16]])

并将元素返回到数组中的原始位置

>>> return_order = np.argsort(col_sort, axis=1)
>>> redordered_in_arr = np.*SOME_SLICE_METHOD*(arr_with_function, return_order, axis=1)
array([[1, 4],
       [16, 3]]) 

好吧,在我输入时考虑一下,我可能只使用 apply_over_axis,但我仍然想知道如何有效地执行上述操作,以防以后它有值(value)。

最佳答案

如果您想就地执行所有这些操作,则不需要 argsort()。 Numpy 在这种情况下支持就地操作:

In [12]: in_arr = np.array([[1,2],[4,3]])

In [13]: in_arr.sort(axis=1)

In [14]: in_arr **= [1, 2]

In [15]: in_arr
Out[15]: 
array([[ 1,  4],
       [ 3, 16]])

但是如果您需要已排序项目的索引,您可以通过简单的索引获得预期的结果。

In [18]: in_arr[np.arange(2)[:,None], col_sort]
Out[18]: 
array([[1, 2],
       [3, 4]])

关于python - Numpy 2D 数组沿特定轴由其他 2D 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50129198/

相关文章:

java - 公共(public)静态变量的 SonarQube 问题 | JAVA

python - 如何对相同 bool 值的 block 进行分组?

python - 如何将 numpy 数组作为对象存储在 pandas 数据框中?

Python 3.2 os 模块 - python 函数或 linux 命令?

python - 带变化点的 PyMC3 回归

python - 伪增加值表的 'resolution'

c++ - 带维度的数组参数

virtualenv 中的 python xlwings 可能吗?

python - python 中维基百科页面的内链和外链

python - 如何计算多变量 1 列的相关系数