Python 如何有效地将列表转换为概率分布?

Python 如何有效地将列表转换为概率分布?,python,arrays,performance,Python,Arrays,Performance,我试图把一个列表转换成概率分布 x = [2, 4] 我希望它按顺序排列在下面的数组中 probability_array = [1-(2+4)/10, 2/10, 4/10] 所以我做了下面的 y = 1 - (2 + 4)/10 new_x = [2/10, 4/10] probability_array = [y] + new_x 问题是我正在处理10000个数据集,比如x。有没有更快的方法可以做到这一点?我认为使用numpy可以轻松做到这一点。下面是一个正确性的例子 x=[[1,

我试图把一个列表转换成概率分布

x = [2, 4]
我希望它按顺序排列在下面的数组中

probability_array = [1-(2+4)/10, 2/10, 4/10]
所以我做了下面的

y = 1 - (2 + 4)/10
new_x = [2/10, 4/10]
probability_array = [y] + new_x

问题是我正在处理10000个数据集,比如
x
。有没有更快的方法可以做到这一点?

我认为使用numpy可以轻松做到这一点。下面是一个正确性的例子

x=[[1, 2], [3,4]]
x=np.array(x)
sum1 = np.sum(x, axis=1).reshape(2,1)
prob = x/sum1
x=np.random.randint(1, 100, size=1000000)
print(x.shape)
start=time.time()
x=x.reshape(-1, 10000)
sum1=np.sum(x, axis=1).reshape((-1, 1))
prob=x/sum1
stop=time.time()
print(stop-start)
我认为即使x的大小大于10000,它也会非常快。让我们以100个特性作为10000个示例

x=[[1, 2], [3,4]]
x=np.array(x)
sum1 = np.sum(x, axis=1).reshape(2,1)
prob = x/sum1
x=np.random.randint(1, 100, size=1000000)
print(x.shape)
start=time.time()
x=x.reshape(-1, 10000)
sum1=np.sum(x, axis=1).reshape((-1, 1))
prob=x/sum1
stop=time.time()
print(stop-start)

我的MBP大约需要0.021秒。

为什么要除以10,而不是任何其他数字?将所有这些除以
sum(x)
,可能更有意义。10000不是那么多。你确定这需要优化吗?请参阅@martineau的非常明智的评论,并猜测这些值在[0-10]中,您可以预计算或记忆/缓存(全部或子集)。感谢大家花时间来看我的问题@Martineau我试图通过测量每个比赛时间段的平方差之和来优化足球比赛的预期目标。以上10项可作为每场比赛的时间段。这是通过简单地用任意乘法器调整xG来实现的。然后尝试优化给出最佳结果的任意乘数(大型数据集的每个时隙的最低平均SSE,10000)。Abs:我明白了,如果你编辑了你的问题并更改了示例,那么它就是你想要的抽象/代数量(即输入变量及其与所需结果的关系)而不是一个大小写和一组文字值,并说明应用该操作的频率以及数据集的大小。可能还想指出是否可以使用类似
numpy
或其他第三方库(与仅限于纯Python及其附带的Python不同)。