如何用返回numpy一维数组的函数填充numpy二维数组
解决numpy二维数组填充问题
嘿,我来帮你搞定这个问题!你遇到的核心问题是对np.append的用法和数组维度匹配理解有偏差,咱们一步步来理清楚:
为什么你的代码会报错?
你初始化的result是一维数组(np.empty(100)),而np.append(..., axis=1)要求操作的数组至少是二维的——一维数组根本没有axis=1这个维度。另外,np.append不是原地修改数组,它会返回一个新数组,你没有把返回值重新赋值给result,所以循环里的操作等于没生效。
两种简单可行的解决方案
方案1:先收集结果到列表,再转numpy数组(最直观)
列表的append操作非常灵活,先把每个predictions(deg)的结果存进列表,最后一次性转换成二维numpy数组,代码如下:
import numpy as np # 假设你的predictions函数已经定义好 def predictions(degree): # 这里是你的魔法逻辑,返回100个元素的np.ndarray return np.random.randint(0, 101, size=100) # 要测试的degree列表 degrees = [1, 2, 4, 8, 10] # 先收集所有结果到列表 result_list = [] for deg in degrees: result_list.append(predictions(deg)) # 转换为二维numpy数组(形状为(5, 100),每行对应一个degree的结果) result = np.array(result_list)
方案2:预分配二维数组,逐个赋值(适合大数据量)
如果你的数据量很大,预分配数组可以避免列表动态扩容的开销,直接初始化一个对应形状的二维数组,然后通过索引赋值:
import numpy as np def predictions(degree): return np.random.randint(0, 101, size=100) degrees = [1, 2, 4, 8, 10] # 预分配二维数组:行数是degree的数量,列数是predictions返回的元素数(100) result = np.empty((len(degrees), 100)) # 循环赋值每一行 for idx, deg in enumerate(degrees): result[idx] = predictions(deg)
关于fromfunction的说明
你提到的np.fromfunction确实不太适合你的场景,它的设计初衷是基于坐标元组生成数组值(比如根据行列索引计算值),而你的degree是不规则的自定义列表,没法直接映射到坐标,所以放弃这个思路是对的。
内容的提问来源于stack exchange,提问作者dr jerry
相关产品推荐
相关产品推荐

