为了账号安全,请及时绑定邮箱和手机立即绑定

有符号排序的 numpy 数组元素

有符号排序的 numpy 数组元素

蝴蝶不菲 2023-03-08 16:29:18
对于一个编程项目,我正在尝试实施修剪和填充方法来量化元分析中的偏差。算法中的步骤之一是在不丢失符号的情况下对向量元素的绝对值进行排序,例如我需要的是这样的:a_before = np.array([1, 3, -3, -2, 5, 2.5, 6]) a_after = np.array([1, 4, -5, 2, 6, 3, 7])到目前为止,我所管理的是使用 获取具有绝对值的数组numpy.absolute,然后使用 对值进行排名.argsort。我想不通的是如何检索新排名数组的原始负值的符号。这是进一步说明的屏幕截图。
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

a_before = np.array([1, 4, -5, 2, 6, 3, 7])
a_after = a_before[np.argsort(np.abs(a_before))]

输出结果a_after为:

array([ 1,  2,  3,  4, -5,  6,  7])


查看完整回答
反对 回复 2023-03-08
?
Helenr

TA贡献1780条经验 获得超3个赞

我想这就是你想要的:


# use bigger numbers so that it's obvious that 'rank' 

# is distinct from the numerical values.

a = np.array([10, 30, -31, -20, 50, 25, 60])

isort = np.argsort(np.abs(a))

rank = np.argsort(isort)+1

signed_rank = rank * np.sign(a)


print(signed_rank)

输出:


[ 1  4 -5 -2  6  3  7]

-2但我认为您的建议中缺少一个减号 ( ) a_after: [1, 4, -5, 2, 6, 3, 7];只有一个负值,而输入有两个负值。


查看完整回答
反对 回复 2023-03-08
  • 2 回答
  • 0 关注
  • 61 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信