gpt4 book ai didi

python - numpy 中列表列表的平均值

转载 作者:太空宇宙 更新时间:2023-11-04 07:13:37 25 4
gpt4 key购买 nike

我有一个循环,可以获取列表的列表:

for i in range(num_exp):
li = func()

其中 li 是表单列表的列表[["s1", 1, 2], ["s2", 2, 3], ["s3", 3, 4]](第一项是字符串,其余 2 项是数字)

我想对循环中每个 li 的数值取平均值。所以对于 num_exp = 3 和 li 的

[["s1", 1, 2], ["s2", 3, 4], ["s3", 5, 6]]
[["s1", 2, 3], ["s2", 4, 5], ["s3", 6, 7]]
[["s1", 3, 4], ["s2", 5, 6], ["s3", 7, 8]]

我会得到

[["s1", 6/3, 9/3], ["s2", 12/3, 15/3], ["s3", 18/3, 21/3]]

我想用 numpy 来做。在简单的 python 中我做如下

 dic = {}
for l in li:
if l[0] not in dic:
dic[l[0]] = l[1:]
else:
dic[l[0]][0] += l[1]
dic[l[0]][1] += l[2]

fl = []
for m in dic:
fl.append([m, dic[m][0]/num_exp, dic[m[1]/num_exp])

但是看起来效率很低

最佳答案

从列表 li 的列表创建 np.array 指定 dtype='object'swapaxes 到组相同的 s 到同一组。将轴 2(最右侧的轴)上的最后 2 个元素切片,sum,然后除以 num_exp。最后,column_stack 唯一的字符串值给它。

num_exp = 3
li = [[["s1", 1, 2], ["s2", 3, 4], ["s3", 5, 6]],
[["s1", 2, 3], ["s2", 4, 5], ["s3", 6, 7]],
[["s1", 3, 4], ["s2", 5, 6], ["s3", 7, 8]]]

arr = np.array(li, dtype='object').swapaxes(0, 1)

Out[372]:
array([[['s1', 1, 2],
['s1', 2, 3],
['s1', 3, 4]],

[['s2', 3, 4],
['s2', 4, 5],
['s2', 5, 6]],

[['s3', 5, 6],
['s3', 6, 7],
['s3', 7, 8]]], dtype=object)

arr1 = arr[...,[1,2]].sum(axis=1) / num_exp

Out[380]:
array([[2.0, 3.0],
[4.0, 5.0],
[6.0, 7.0]], dtype=object)

s = arr[:,0, 0]
result = np.column_stack([s, arr1])

Out[389]:
array([['s1', 2.0, 3.0],
['s2', 4.0, 5.0],
['s3', 6.0, 7.0]], dtype=object)

关于python - numpy 中列表列表的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57469483/

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