如何在两个numpy数组间实现随机整数插值且尽量少用Numpy操作
优化实现方案
import numpy as np def mate_interpolate(arr, arr2): ''' 接收两个相同维度的数组,返回相同维度的结果数组 每个位置的元素是两个输入数组对应位置元素之间的随机整数,包含两端值 ''' low = np.minimum(arr, arr2) high = np.maximum(arr, arr2) return np.random.randint(low=low, high=high + 1, size=arr.shape)
效果验证
输入测试用例:
a = np.array([1,2,3]) b = np.array([4,5,6]) print(mate_interpolate(a, b))
输出示例:[2 4 3],符合每个元素在对应位置区间内的整数要求。
优化点说明
- 无额外临时数组:仅生成
low、high两个布尔运算生成的轻量视图(非完整拷贝数组),最终直接生成结果数组,相比原实现减少了差数组、随机浮点数数组两个临时大数组的内存开销 - 直接输出整数:不需要额外做浮点数转整数的操作,避免精度损失
- 鲁棒性更强:自动适配两个数组对应位置值的大小关系,不管
arr的值比arr2大还是小都能正常生成区间内的随机数 - 操作简单无“魔法”:仅使用了numpy最基础的最值、随机整数生成接口,没有用到复杂的广播或高阶运算
内容的提问来源于stack exchange,提问作者Smer5
相关产品推荐
相关产品推荐

