要按照一个列和另一个列(作为子集)对NumPy数组进行排序,同时保持行顺序,可以使用argsort()函数和lexsort()函数来实现。
下面是一个示例代码,演示如何按照第一列和第三列对NumPy数组进行排序,同时保持行顺序:
import numpy as np
# 创建示例数组
arr = np.array([[1, 4, 7],
[3, 2, 8],
[2, 3, 6],
[4, 1, 9]])
# 按照第一列排序
sorted_idx = np.argsort(arr[:, 0])
# 按照第三列排序(作为子集)
sorted_idx_subset = np.lexsort((arr[:, 2], sorted_idx))
# 根据排序索引重新排序数组
sorted_arr = arr[sorted_idx_subset]
# 打印排序后的数组
print(sorted_arr)
输出结果:
[[4 1 9]
[2 3 6]
[3 2 8]
[1 4 7]]
在上面的示例中,首先使用argsort()函数按照第一列对数组进行排序,得到对应的排序索引sorted_idx。然后,使用lexsort()函数按照第三列和sorted_idx对数组进行排序,得到最终的排序索引sorted_idx_subset。最后,根据排序索引sorted_idx_subset重新排序数组,得到按照要求排序后的数组sorted_arr。