Skip to main content
 首页 » 编程设计

python之对多个 NumPy 数组进行排序

2025年05月04日13lidabo

我正在创建一个包含股票 yield 的二维 numpy 数组。我想每 2 天对 yield 求和,如果总和在前两位,我会将形状相似的数组中的每个元素都设置为 True。

例如,下面的 yield 是四种不同股票的每日 yield 。

returns=np.array([<br/> [0, 0, 4, 8],<br/> [7, 5, 4, 1],<br/> [10, 5, 7, 6],<br/> [7, 5, 4, 2]])

前两天,第 2 列和第 3 列(使用基于 0 的索引)的总和最高。对于第二组两天,第 0 列和第 2 列的总和最高。我想要的输出数组是

bools=np.array([<br/> [False, False, True, True],<br/> [False, False, True, True],<br/> [True, False, True, False],<br/> [True, False, True, False]])

有什么好的方法可以做到这一点?

如果两天的总和有平局,我想使用另一个形状相似的 numpy 数组作为决胜局。

例如,如果

returns=np.array([<br/> [0, 9, 4, 8],<br/> [7, 5, 4, 0],<br/> [10, 5, 7, 6],<br/> [7, 5, 4, 2]])

对于第一组两天,第 2 列和第 3 列并列第二高的总和。我想根据并列的最后一行中的最大值来决定决胜局,以便第 2 列和第 3 列之间的决胜局查看 tiebreaks[1][2] 与 tiebreaks[1][3](4 v 5) , 最终输出为 bools2。

tiebreaks=np.array([<br/> [0, 0, 1, 1],<br/> [2, 3, 4, 5],<br/> [0, 5, 7, 6],<br/> [-7, 5, -4, 2]])

bools2=np.array([<br/> [False, True, False, True],<br/> [False, True, False, True],<br/> [True, False, True, False],<br/> [True, False, True, False]])

感谢您的帮助。

请您参考如下方法:

您可以使用 numpy.lexsort()获取使用 prices 作为主键和 names 作为辅助键对数组进行排序的索引。使用这些索引应用高级索引会产生排序的数组:

col_indices = numpy.lexsort((names, prices)) 
row_indices = numpy.arange(len(names))[:, None] 
print(prices[row_indices, col_indices]) 
print(names[row_indices, col_indices]) 

(请注意,在您的示例中,names 和 prices 没有兼容的形状。)