gpt4 book ai didi

python - 列表中对的乘积之和

转载 作者:太空狗 更新时间:2023-10-29 20:32:21 26 4
gpt4 key购买 nike

这是我遇到的问题。给定一个列表

xList = [9, 13, 10, 5, 3]

我想计算每个元素乘以后续元素的总和

sum([9*13, 9*10, 9*5 , 9*3]) + 
sum([13*10, 13*5, 13*3]) +
sum([10*5, 10*3]) +
sum ([5*3])

在这种情况下,答案是 608

有没有办法用 itertools 或原生用 numpy 来做到这一点?

下面是我想出的一个函数。它可以完成工作,但远非理想,因为我还想添加其他内容。

    def SumProduct(xList):
''' compute the sum of the product
of a list
e.g.
xList = [9, 13, 10, 5, 3]
the result will be
sum([9*13, 9*10, 9*5 , 9*3]) +
sum([13*10, 13*5, 13*3]) +
sum([10*5, 10*3]) +
sum ([5*3])
'''
xSum = 0
for xnr, x in enumerate(xList):
#print xnr, x
xList_1 = np.array(xList[xnr+1:])
#print x * xList_1
xSum = xSum + sum(x * xList_1)
return xSum

感谢任何帮助。

注意:如果您想知道,我正在尝试实现 Krippendorf's alpha Pandas

最佳答案

x = array([9, 13, 10, 5, 3])
result = (x.sum()**2 - x.dot(x)) / 2

与可能具有二次性能的其他解决方案相比,这利用了一些数学简化来在线性时间和恒定空间中工作。

这是一个工作原理图。假设 x = array([2, 3, 1])。然后,如果您将产品视为矩形区域:

x is this stick: -- --- -

x.sum()**2 is this rectangle:
-- --- -
|xx xxx x
|xx xxx x

|xx xxx x
|xx xxx x
|xx xxx x

|xx xxx x

x.dot(x) is this diagonal bit:
-- --- -
|xx
|xx

| xxx
| xxx
| xxx

| x

(x.sum()**2 - x.dot(x)) is the non-diagonal parts:
-- --- -
| xxx x
| xxx x

|xx x
|xx x
|xx x

|xx xxx

and (x.sum()**2 - x.dot(x)) / 2 is the product you want:
-- --- -
| xxx x
| xxx x

| x
| x
| x

|

关于python - 列表中对的乘积之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30039334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com