如何生成N维随机值数组?现有NumPy写法能否用内置函数优化?
当然有更高效的方法!
你完全不用手动逐个调用random.randint再包装成NumPy数组——NumPy本身就提供了专门的随机数生成工具,不仅代码更简洁,速度也快得多,而且天生支持生成任意N维的数组。
最直接的替代:np.random.randint()
这个函数完美匹配你的需求,可以直接生成指定范围、任意维度的整数数组。它的参数很简单:
low:生成整数的下限(包含)high:生成整数的上限不包含,所以你要生成0-9的数,这里得写10size:数组的形状,可以是单个整数(一维数组),或者元组(多维数组)
对应你原来的代码,用这个函数可以改成:
import numpy as np # 方式1:分别生成x和y x = np.random.randint(0, 10, size=3) y = np.random.randint(0, 10, size=3) # 方式2:一次性生成两个3维数组再拆分(更高效) x, y = np.random.randint(0, 10, size=(2, 3))
更推荐的现代用法:numpy.random.Generator
NumPy现在推荐使用Generator类来生成随机数,它的API更清晰,也更灵活。用法如下:
import numpy as np # 初始化随机数生成器 rng = np.random.default_rng() # 生成单个3维数组 x = rng.integers(0, 10, size=3) y = rng.integers(0, 10, size=3) # 或者一次性生成两个数组 x, y = rng.integers(0, 10, size=(2, 3))
扩展到N维数组
要生成任意N维的数组,只需要把size参数改成对应的形状元组就行。比如:
- 生成一个4维数组:
rng.integers(0, 10, size=(2, 3, 4, 5)) - 生成一个10维数组:
rng.integers(0, 10, size=(5,)*10)
为什么这比你的原方法高效?
你的原代码是在Python层面循环调用random.randint,然后把结果打包成NumPy数组——而NumPy的随机函数是底层用C实现的向量化操作,当数组规模变大时,速度差距会非常明显,同时代码也更简洁易维护。
内容的提问来源于stack exchange,提问作者Jake Jackson
相关产品推荐
相关产品推荐

