根据另一个 numpy 数组对 numpy 数组的每一行的列重新排序
Reoder the columns of each row of a numpy array based on another numpy array
我们有一个名为 main_arr 的主数组,我们想将其转换为另一个名为 result 的数组相同大小,使用 guide_arr,
再次使用相同的尺寸:
import numpy as np
main_arr = np.array([[3, 7, 4], [2, 5, 6]])
guide_arr = np.array([[2, 0, 1], [0, 2, 1]])
result = np.zeros(main_arr.shape)
我们需要结果等于:
if np.array_equal(result, np.array([[7, 4, 3], [2, 6, 5]])):
print('success!')
我们应该如何使用guide_arr?
guide_arr[0,0]为2,表示result[0,2] = main_arr[0,0]
guide_arr[0, 1] 为 0 表示 result[0, 0] = main_arr[0, 1]
guide_arr[0, 2] 是 1 意味着 result[0, 1] = main_arr[0,2]
第 1 行也是如此。
总而言之,main_arr 中的项目应该重新排序(在一行中,行永远不会改变),以便它们的新列索引等于 guide_arr 中的数字。
In [199]: main_arr = np.array([[3, 7, 4], [2, 5, 6]])
...: guide_arr = np.array([[2, 0, 1], [0, 2, 1]])
...:
重新排序列的常用方法(顺序因行而异)是使用如下索引:
In [200]: main_arr[np.arange(2)[:,None],guide_arr]
Out[200]:
array([[4, 3, 7],
[2, 6, 5]])
arange(2)[:,None]
是用(2,3)索引数组广播的列数组
我们可以将相同的想法应用到使用 guide_arr
来识别 result
中的列:
In [201]: result = np.zeros_like(main_arr)
In [202]: result[np.arange(2)[:,None], guide_arr] = main_arr
In [203]: result
Out[203]:
array([[7, 4, 3],
[2, 6, 5]])
这可能会阐明广播的工作原理:
In [204]: np.broadcast_arrays(np.arange(2)[:,None], guide_arr)
Out[204]:
[array([[0, 0, 0],
[1, 1, 1]]),
array([[2, 0, 1],
[0, 2, 1]])]
我们有一个名为 main_arr 的主数组,我们想将其转换为另一个名为 result 的数组相同大小,使用 guide_arr, 再次使用相同的尺寸:
import numpy as np
main_arr = np.array([[3, 7, 4], [2, 5, 6]])
guide_arr = np.array([[2, 0, 1], [0, 2, 1]])
result = np.zeros(main_arr.shape)
我们需要结果等于:
if np.array_equal(result, np.array([[7, 4, 3], [2, 6, 5]])):
print('success!')
我们应该如何使用guide_arr?
guide_arr[0,0]为2,表示result[0,2] = main_arr[0,0]
guide_arr[0, 1] 为 0 表示 result[0, 0] = main_arr[0, 1]
guide_arr[0, 2] 是 1 意味着 result[0, 1] = main_arr[0,2]
第 1 行也是如此。
总而言之,main_arr 中的项目应该重新排序(在一行中,行永远不会改变),以便它们的新列索引等于 guide_arr 中的数字。
In [199]: main_arr = np.array([[3, 7, 4], [2, 5, 6]])
...: guide_arr = np.array([[2, 0, 1], [0, 2, 1]])
...:
重新排序列的常用方法(顺序因行而异)是使用如下索引:
In [200]: main_arr[np.arange(2)[:,None],guide_arr]
Out[200]:
array([[4, 3, 7],
[2, 6, 5]])
arange(2)[:,None]
是用(2,3)索引数组广播的列数组
我们可以将相同的想法应用到使用 guide_arr
来识别 result
中的列:
In [201]: result = np.zeros_like(main_arr)
In [202]: result[np.arange(2)[:,None], guide_arr] = main_arr
In [203]: result
Out[203]:
array([[7, 4, 3],
[2, 6, 5]])
这可能会阐明广播的工作原理:
In [204]: np.broadcast_arrays(np.arange(2)[:,None], guide_arr)
Out[204]:
[array([[0, 0, 0],
[1, 1, 1]]),
array([[2, 0, 1],
[0, 2, 1]])]