在多个NumPy数组上排序

2024-09-30 14:34:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个包含股票回报的二维numpy数组。我想每两天计算一次返回值的总和,如果总和在前两位,我将把形状相似的数组中的每个元素设置为True。在

例如,下面的收益率是四种不同股票的日收益率。在

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

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

bools=np.array([
[False, False, True, True],
[False, False, True, True],
[True, False, True, False],
[True, False, True, False]])

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

如果两天的总和有联系,我想用另一个形状类似的纽比阵列作为决胜局。在

例如,如果

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

前两天,第2列和第3列并列第二高。我想根据最后一行中并列列的最大值来确定分界线,这样第2列和第3列之间的平局将看分界线[1][2]与分界线[1][3](4 v 5),最终的输出是bools2。在

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

bools2=np.array([
[False, True, False, True],
[False, True, False, True],
[True, False, True, False],
[True, False, True, False]])

谢谢你的帮助。在


Tags: numpyfalsetrue元素np数组arrayreturns
1条回答
网友
1楼 · 发布于 2024-09-30 14:34:36

您可以使用^{}获取索引,这些索引使用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和{}没有兼容的形状。)

相关问题 更多 >