gpt4 book ai didi

python - 字典值的平均值,其中值采用列表/数组的形式。 (一类)

转载 作者:行者123 更新时间:2023-12-01 06:30:38 25 4
gpt4 key购买 nike

背景:

不确定我的术语是否正确,所以如果这恰好是一个重复的问题,我深表歉意 (similar question 1 , similar question 2) 。我一直在阅读本教程How to Iterate Through a Dictionary in Python我想我想做的是类似于“做一些计算:重访”的事情,但以“元组解包”的形式(第三个链接中使用的单词)。

问题/目标:

我希望用原始键创建一个新字典,一个新值是旧值列表的平均值并绘制它。

我的尝试:

下面是一个 for 循环的完整尝试,也是我制作“oneliner”的尝试。我得到的最接近的是形成两个不同的变量,它们接受字典键,另一个变量接受值并将它们绘制为 (x,y)。

k_to_accuracies = {1: [0.274, 0.274, 0.274, 0.274, 0.274], 
2: [0.224, 0.224, 0.224, 0.224, 0.224],
3: [0.272, 0.272, 0.272, 0.272, 0.272],
5: [0.278, 0.278, 0.278, 0.278, 0.278],
7: [0.274, 0.274, 0.274, 0.274, 0.274],
10: [0.282, 0.282, 0.282, 0.282, 0.282],
15: [0.272, 0.272, 0.272, 0.272, 0.272],
20: [0.272, 0.272, 0.272, 0.272, 0.272],
25: [0.274, 0.274, 0.274, 0.274, 0.274],
30: [0.254, 0.254, 0.254, 0.254, 0.254]}
k_ave = {}
for key, value in k_to_accuracies.items():
#print(key, '->', value)
k_ave[key] = np.mean(value)
print(k_ave)

k_ave = {}
k_ave = [np.mean(value) for value in k_to_accuracies.values()]
print("\n",k_ave)

k_keys = [key for key in k_to_accuracies.keys()]
print("\n",k_keys)

plt.plot(k_keys, k_ave, '.')
plt.show()

问题

  1. 如果可能的话,我将如何将其写成一行,或者最有效/最快的方法是什么。

  2. 将其称为矢量化/广播计算是否正确?如果可能的话,有人可以解释我如何矢量化/广播这些代码行吗? (也不确定这是否是正确的术语,甚至是否适用于这种情况)。除了标准 scipy tutorial 之外,我还没有找到关于这些概念的可靠教程。还有tutorialspoint

最佳答案

这可以写成一行,但我不推荐这样做:

>>> plt.plot(*zip(*{k: np.mean(v) for k, v in k_to_accuracies.items()}.items()), '.')

正如您所看到的,这是相当不透明的,虽然它产生了正确的输入,但您问题中的版本更容易阅读和理解。就时间比较而言,这种方法与您问题中的方法几乎没有区别:

k_ave = [np.mean(value) for value in k_to_accuracies.values()]
k_keys = [key for key in k_to_accuracies.keys()]
plt.plot(k_keys, k_ave, '.')

这些都不是垂直或广播计算。这些术语指的是无需使用 for 循环即可对数据执行批处理操作的位置,并且在 Python 的 C 扩展中很常见,例如对 Numpy 的数组和 Pandas 的数据帧执行的操作。由于这里的数据结构是字典,因此如果不转换为这些结构之一,我们就无法在此处应用矢量化。

我们在这里采用的方法是使用列表推导式和生成器表达式,它们基本上是一种缩小和组合 for 循环和 lambda 函数的方法。您可以阅读有关这些的更多信息 here 。请注意,这些与广播操作/向量化之间的区别在于列表推导式迭代结构并一次对一个数据应用操作。

关于python - 字典值的平均值,其中值采用列表/数组的形式。 (一类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59928765/

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