如何让numpy.linspace生成的数组必含特定值且不调整边界与点数?
问题描述
我用numpy.linspace生成数组供其他函数遍历,示例函数如下:
def fun(array): newarray= [] for i in array: newarray.append(i**2) return newarray
现在希望生成的数组必须包含数值2,要求用numpy.linspace相关方法在生成时实现,不调整边界(0到20)和总点数(30),且不事后插入该值。
解决方法
直接用numpy.linspace(0,20,30)无法生成包含2的数组——该方法是均分区间,步长为20/(30-1)≈0.6897,2不是这个步长的整数倍(2/0.6897≈2.9),因此2不会出现在默认生成的序列里。
要在生成阶段就得到满足要求的数组,可以将区间拆分为[0,2]和[2,20]两部分分别生成序列,再拼接成最终数组:
- 分配点数:设
[0,2]包含k+1个点(含0和2),[2,20]包含m+1个点(含2和20),由于2会被重复计算一次,因此(k+1)+(m+1)-1=30,即k+m=29。你可以任意选择正整数k和m满足该等式,比如取k=4、m=25。 - 生成并拼接序列:
import numpy as np # 生成[0,2]区间的5个点(含0和2) part1 = np.linspace(0, 2, 5) # 生成[2,20]区间的26个点,去掉重复的2 part2 = np.linspace(2, 20, 26)[1:] # 拼接得到最终数组 result = np.concatenate((part1, part2)) print(result.size) # 输出30,符合点数要求 print(2 in result) # 输出True,包含数值2
这样生成的数组既满足边界、点数要求,又在生成阶段就包含2,无需事后修改。
内容的提问来源于stack exchange,提问作者Indiano
相关产品推荐
相关产品推荐

