使用NumPy计算嵌套列表子列表列均值失败,如何正确实现?
计算嵌套子列表的列均值问题解决
原代码无效的原因
你写的循环里,c = np.mean(np.array(c), axis=0)只是给循环临时变量c重新赋值,并没有修改原centroids列表中的元素,所以原列表不会产生任何变化。
正确实现方式
方法1:通过索引修改原列表
直接遍历列表索引,将计算后的列均值赋值回原列表对应位置:
import numpy as np centroids = [[[3, 2]], [[2, 3], [3, 4], [2, 3]], [[1, 2], [3, 4]]] for i in range(len(centroids)): # 将子列表转成numpy数组,计算列均值后转回列表 centroids[i] = np.mean(np.array(centroids[i]), axis=0).tolist() print(centroids)
方法2:用列表推导式生成新结果列表(更简洁)
如果不需要修改原列表,直接生成包含所有列均值的新列表:
import numpy as np centroids = [[[3, 2]], [[2, 3], [3, 4], [2, 3]], [[1, 2], [3, 4]]] result = [np.mean(np.array(sub_list), axis=0).tolist() for sub_list in centroids] print(result)
保留指定小数位数(如一位小数)
如果需要和你期望的[2.3, 3.3]格式一致,可以用np.round()处理精度:
result = [np.round(np.mean(np.array(sub_list), axis=0), 1).tolist() for sub_list in centroids]
运行后得到的结果为:[[3.0, 2.0], [2.3, 3.3], [2.0, 3.0]],完全符合你的需求。
内容的提问来源于stack exchange,提问作者Kim
相关产品推荐
相关产品推荐

