初始数组为空时如何将numpy数组作为行追加并计算行均值?
解决方案
方法1:动态构建二维numpy数组
如果不想用普通列表中转,可以通过初始设为None,每次追加时统一数组维度:
import numpy as np def get_array(): # 替换为你的实际数组生成函数 return np.random.randint(1, 10, size=4) arr = None for _ in range(3): b = get_array() if arr is None: # 将第一个一维数组转为二维行向量 arr = b[np.newaxis, :] else: # 垂直追加新行 arr = np.vstack([arr, b]) # 计算每列的均值(对应你示例中的结果) desired_result_average = np.mean(arr, axis=0)
这种方式避免了列表中转,第一次将一维数组转为(1, n)的二维结构,后续用np.vstack直接追加同维度的行,解决了维度不匹配的问题。
方法2:列表推导式+转numpy数组(高效且简洁)
你觉得用列表存储不够优雅,但实际上这是numpy官方推荐的高效写法——列表的动态扩容比numpy数组反复重新分配内存更高效,而且代码可以写得非常简洁:
import numpy as np def get_array(): return np.random.randint(1, 10, size=4) # 用列表推导式收集所有数组,直接转为二维numpy数组 arr = np.array([get_array() for _ in range(3)]) desired_result_average = np.mean(arr, axis=0)
一行代码完成数组收集,既简洁又高效,完全符合"优雅"的要求。
为什么你之前的方法失败?
你尝试的np.concatenate、np.vstack等方法要求数组维度匹配,但初始的np.array([])是一维空数组,而get_array()返回的是一维数组(比如长度为4),两者维度不兼容。只要确保初始数组是二维的(哪怕只有一行),后续就能正常追加。
内容的提问来源于stack exchange,提问作者Mattlehem
相关产品推荐
相关产品推荐

