我正在创建一个包含股票 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 没有兼容的形状。)
