如何在NumPy数组中使用列表推导式替代嵌套for循环初始化指定形状随机数组
高效生成指定区间Numpy数组的实现方法
最优实现方案(无需循环/列表推导式,性能最高)
你要实现的逻辑完全可以用Numpy原生方法直接完成,不需要在Python层写任何循环,性能比列表推导式更高,写法如下:
import numpy as np N = 100 # 种群规模 D = 30 # 维度 lowerB = [-5.12] * D # 各维度下限 upperB = [5.12] * D # 各维度上限 # 直接生成形状为(N,D)的符合区间要求的数组 X = np.random.uniform(low=lowerB, high=upperB, size=(N, D))
该方法利用Numpy的广播机制自动适配维度,底层用C实现运算,效率远高于Python层的列表推导式或者循环。
列表推导式实现版本
如果你确实需要用列表推导式实现,正确写法如下:
X = np.array([[np.random.uniform(lowerB[d], upperB[d]) for d in range(D)] for i in range(N)])
你之前的写法存在的问题:两层循环完全展平,生成的是每个元素为(x,y)坐标对的一维数组,最终形状为(N*D, 2),不符合要求。正确的嵌套列表推导式需要内层循环生成单条样本的所有维度值,外层循环遍历所有样本,最终生成嵌套列表结构再转成对应形状的Numpy数组。
相关学习参考
你可以查阅以下官方文档内容学习相关规则:
- Numpy官方文档中
numpy.random.uniform方法的参数说明、形状广播规则章节 - Numpy数组广播机制基础教程章节
- Python官方文档中列表推导式的嵌套语法规则章节
内容的提问来源于stack exchange,提问作者Logan
相关产品推荐
相关产品推荐

