创建一个以 0.1 间隔递增的重复元素数组
Create an array of repeating elements that increase by 0.1 intervals
我想让我的代码做的是创建一个元素数组:
[13.8, 13.9, 14.,...] 增加 0.1,但每个元素在进入下一个数字之前应重复 17 次。下面是我的代码。
from numpy import*
from pylab import*
def f(elem):
return repeat((elem + 0.1),17)
print f(13.8)
def lst(init):
yield init
while True:
next = f(init)
yield next
init = next
for i in lst(13.8):
print i
if i > 20:
break
代码输出只显示一个数组13.9重复17次,但随后显示错误:
Traceback (most recent call last):
File "repeatelementsarray.py", line 19
if i > 20:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
程序似乎试图创建多个数字数组,我只想要一个数组。此外,由于 lst 是一个生成器,它不应该给出一个数组,所以使用 fromiter?
您可以使用 np.arange
to get the linearly increasing sequence, and np.repeat
的组合来重复每个元素:
import numpy as np
elems = np.arange(0, 1, 0.1)
reps = np.repeat(elems, 3)
print(reps)
# [ 0. 0. 0. 0.1 0.1 0.1 0.2 0.2 0.2 0.3 0.3 0.3 0.4 0.4 0.4
# 0.5 0.5 0.5 0.6 0.6 0.6 0.7 0.7 0.7 0.8 0.8 0.8 0.9 0.9 0.9]
基于xrange,可以生成这样的函数:
def repeated_range(start, stop, step=0.1, repeat=5):
r = start
while r < stop:
for i in xrange(repeat):
yield r
r += step
这会生成您想要的结果。
我想让我的代码做的是创建一个元素数组: [13.8, 13.9, 14.,...] 增加 0.1,但每个元素在进入下一个数字之前应重复 17 次。下面是我的代码。
from numpy import*
from pylab import*
def f(elem):
return repeat((elem + 0.1),17)
print f(13.8)
def lst(init):
yield init
while True:
next = f(init)
yield next
init = next
for i in lst(13.8):
print i
if i > 20:
break
代码输出只显示一个数组13.9重复17次,但随后显示错误:
Traceback (most recent call last):
File "repeatelementsarray.py", line 19
if i > 20:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
程序似乎试图创建多个数字数组,我只想要一个数组。此外,由于 lst 是一个生成器,它不应该给出一个数组,所以使用 fromiter?
您可以使用 np.arange
to get the linearly increasing sequence, and np.repeat
的组合来重复每个元素:
import numpy as np
elems = np.arange(0, 1, 0.1)
reps = np.repeat(elems, 3)
print(reps)
# [ 0. 0. 0. 0.1 0.1 0.1 0.2 0.2 0.2 0.3 0.3 0.3 0.4 0.4 0.4
# 0.5 0.5 0.5 0.6 0.6 0.6 0.7 0.7 0.7 0.8 0.8 0.8 0.9 0.9 0.9]
基于xrange,可以生成这样的函数:
def repeated_range(start, stop, step=0.1, repeat=5):
r = start
while r < stop:
for i in xrange(repeat):
yield r
r += step
这会生成您想要的结果。