Python中求和得到的嵌套浮点数列表如何转换为标准浮点数组
问题根源说明
- 你混用了原生Python列表操作与NumPy数组的运算逻辑,还额外加了无意义的嵌套,最终导致输出是列表结构而非标准浮点数组:
- 你给每个296x296的
TQV_xxxx浮点数组额外套了一层单元素[],后续用到的zip、原生sum都是Python内置的原生可迭代操作,本身就不会返回NumPy标准浮点数组。 - 当你把二维
TQV_xxxx数组直接作为zip的输入时,zip会默认遍历每个二维数组的行维度,把296行拆成独立的迭代元素,最终列表推导返回的是按行累加结果的集合,外层完全是Python原生列表结构。 - 嵌套列表内部存储的是原始浮点数组,是因为外层列表只是把
TQV_xxxx作为普通元素存放,没有修改数组本身的存储结构,只是多套了列表的壳。
- 你给每个296x296的
修正方案
不需要用到zip和原生sum,直接用NumPy的原生运算就能得到符合要求的296x296浮点数组:
- 先整理待累加的数组列表,去掉多余的嵌套层:
tqv_list = [TQV_1986, TQV_2002, TQV_1984, TQV_1990, TQV_2010, TQV_1989, TQV_1989, TQV_1996, TQV_1997, TQV_2011] - 对所有数组做堆叠后沿第0轴逐元素求和,输出就是和单个
TQV_xxxx尺寸完全一致的浮点数组:import numpy as np TQV_sum_least = np.sum(np.stack(tqv_list), axis=0) - 如果不需要提前做堆叠,也可以用循环累加的简化写法,效果完全一致:
TQV_sum_least = np.zeros_like(TQV_1986, dtype=np.float64) for arr in tqv_list: TQV_sum_least += arr
结果校验
执行修正代码后,可通过以下语句确认输出符合要求:
print(TQV_sum_least.shape, type(TQV_sum_least))
正常输出应为(296, 296) <class 'numpy.ndarray'>,可直接用于后续所有数组运算。
内容的提问来源于stack exchange,提问作者madschm
相关产品推荐
相关产品推荐

