在Python中平衡整数数组的有效方法

时间:2018-02-14 18:57:25

标签: python arrays python-3.x random transformation

以下代码

import numpy as np
W   = 5         # any odd positive integer
L   = 7         # any positive integer
M   = (W-1)//2
arr = np.random.choice(range(W),L) - M

生成一个长度为L的数组,其数字范围为-MM。现在我想修改这个数组,使其总和为0(同时保持元素在-MM内的限制。)

我希望通过添加增量+1 (如果初始总和为负)或增量为-1 (如果初始总和为正)来实现此目的这个数组的元素,从列表的第一个元素开始(然后我应该需要第二个,第三个元素等)。例如,如果初始总和是-2(即负数)且数组是[2,0,-1,...]那么我不能通过第一个元素增加+1(它已经在最大W=2处),因此我需要将第二个元素增加两次,结果为[2,2,-1,...]

三个样本:

[-1,  0,  0, -1,  2,  0, 2] ---> [-2, -1,  0, -1,  2,  0, 2]
or
[-2, -2,  1, -2,  0, -1, 2] ---> [ 2, -2,  1, -2,  0, -1, 2]
or 
[ 2,  2,  2,  2,  2,  2, 2] ---> [-2, -2, -2,  0,  2,  2, 2]

写一些for / while循环很容易做到这一点,但是有更有效的方法(也许是一个numpy函数)?

0 个答案:

没有答案