【问题标题】:sum of squared difference for list of lists with a single list elements具有单个列表元素的列表列表的平方差总和
【发布时间】:2018-11-16 04:24:52
【问题描述】:

我有以下两个列表,并试图获得列表之间的平方差之和

list = [[20.20458675 17.14946271  2.78568516  5.8363439  14.00318441 11.96825089]
 [ 3.89675236  9.99523907 13.0328716  18.10551237 22.11318234 -0.30354959]]

primary = [0, 1, 0, 0, 0, 1]

result = [x, y]

x is sum of squared difference of each element in list[1] and each element in primary (20.20458675 - 0)**2 + (17.14946271 - 1)**2 + .....
y is sum of squared difference of each element in list[2] and each element in primary (3.89675236 - 0)**2 + (9.99523907 - 1)**2 + ......

我试图做这样的事情:

count = 0
for i in list:
    sum = 0
    count += 1
    for j in range(len(i)):
        sum += (i[j] - primary[j])**2
    result[count] = sum

我遇到了一个列表索引错误,关于如何解决这个问题的任何建议:

【问题讨论】:

  • 你得到索引错误,因为 i 是一个整数并且它没有长度属性for j in range(len(i)):

标签: python list iterator sum


【解决方案1】:

你可以用 numpy 做到这一点:

import numpy as np
arrList = np.array(lst) # Don't use 'list' as variable name
arrPri = np.array(primary)
x, y = np.sum((arrList-arrPri)**2, axis=1)
# x:
# array([408.22532574, 260.80514582,   7.76004181,  34.06291012,
#    196.08917362, 120.30252759])
# y:
# array([ 15.18467896,  80.91432593, 169.85574214, 327.80957818,
#    488.9928332 ,   1.69924153])

【讨论】:

  • 如果您可以将np.sum((arrList-arrPri)**2,axis=1) 添加到您的代码中,那将是最好的
  • 对不起,我认为我的解释不正确。我希望在您提到的上述代码中获取 x 中所有元素的总和以及 y 中所有元素的总和,以存储在这样的列表中 result = [sum(x) , sum(y)] ( I以实际值表示)
  • @stackuser 这就是为什么我告诉他添加此代码:)。它得到两个数组的总和并放入另一个数组
  • 这对阿尔宾保罗有效。谢谢你们!
  • @AlbinPaul Sry 没有看到这一点。干杯
【解决方案2】:
listl= [[20.20458675 ,17.14946271 , 2.78568516 , 5.8363439 , 14.00318441 ,11.96825089]
, [ 3.89675236 , 9.99523907, 13.0328716 , 18.10551237, 22.11318234 ,-0.30354959]]

primary = [0, 1, 0, 0, 0, 1]
for i in listl:
    print(sum(map(lambda x:(x[0]-x[1])**2,zip(primary,i))))

输出

1027.2451246961205
1084.4563999396066

【讨论】:

  • 如何将我的列表转换为此处显示的列表?
  • 在列表中的元素之间放置逗号?
  • 是的,如何转换,有内置函数吗?
  • 我问这个是因为我的列表不是静态的
  • 现在我只是做了 np.array(lst) 但它给了我和错误指向一个空格我的 lst 现在没有逗号
猜你喜欢
  • 2023-01-12
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 2014-11-28
  • 2011-08-17
相关资源
最近更新 更多