Python中平衡整数数组的有效方法
下面的代码Python中平衡整数数组的有效方法,python,arrays,python-3.x,random,transformation,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的数组,其数字范围为-M到M。现在我想修改这个数组,使其和为0(同时保持元素在-M到M范围内的限制) 我希望通过将+1的增量(如果初始和为负数)或-1的增量(如果初
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
的数组,其数字范围为-M
到M
。现在我想修改这个数组,使其和为0(同时保持元素在-M
到M
范围内的限制)
我希望通过将+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函数)?我假设结果列表也应该只包含从
-W
到W
的数字?有多种方法可以求和到零。您的最后一个示例也可以是[0,0,0,0,0,0]
您必须更好地解释平衡的“规则”。添加了更多详细信息。在您的示例中,始终存在#of+-1是偶数,对于+-2也是一样。[-1、-1、+2、+1、+1、+1、-2、0]是有效的输出吗?这是一个丑陋的、不直观的小问题。我在这里看不到优雅的解决方案,任何聪明的解决方案在将来都很难调试。使用循环求解有什么问题?