【发布时间】:2019-02-13 18:34:50
【问题描述】:
假设我有两个长度相等的数组:
a = [0,0,1,0,0,1,0,0,0,1,0,1,1,0,0,0,1]
b = [0,1,1,0,1,0,0,1,1,0,0,1,1,0,1,0,0]
现在我想从这两个数组中提取元素,按照给定的顺序,通过随机选择 a 和 b 之间的值,它们形成一个长度与 a 和 b 相同的新数组,比例为 a:b = 4.68 即对于从 a 中选取的每 1 个值,在结果数组中应该从 b 中选取 4.68 个值。
如此有效的结果数组可能是这样的:
res = [0,1,1,0,1, 1(from a) ,0(from a),1,1,0,0,1,1,0, 0(from a),0,0]
res 数组有:前 5 个值来自 b,第 6 和第 7 个来自 a,第 8-14 个来自 b,第 15 个来自 a,第 16-17 个来自 b
给定 res 数组示例中 a:b 值的总体比率为 a:b 4.67(a = 3,b = 14)
因此,在两个数组之间,必须随机选择值,但是需要保持顺序,即不能从一个数组中获取第 7 个值,而从另一个数组中获取第 3 个值。如果要填充到结果数组中的值是第 3 个,则选择是在两个输入数组的第三个元素之间随机选择。此外,还需要保持整体比率。
能否请您帮助我开发一种有效的 Pythonic 方式来实现此结果解决方案?解决方案不必与每次运行 w.r.t 值保持一致
【问题讨论】:
-
你能用 numpy 吗?
-
比率是否必须尽可能接近精确,还是只是概率?
-
可以使用 numpy 。比率需要尽可能接近小数点后两位
-
@raul:所以要明确一点,选择不是独立的?如果偶然选择了来自
a的前三个值作为来自res的前三个值,那么res中的所有其他值必须来自b,对吗? -
@ShadowRanger 没错
标签: python arrays python-2.7