我们都熟悉np.linspace
,它会根据start
,stop
和num
元素创建一个数组:
In [1]: import numpy as np
In [2]: np.linspace(0, 10, 9)
Out[2]: array([ 0. , 1.25, 2.5 , 3.75, 5. , 6.25, 7.5 , 8.75, 10. ])
同样,谁可能会忘记np.arange
,这会创建一个给定start
,stop
和step
的数组:
In [4]: np.arange(0, 10, 1.25)
Out[4]: array([ 0. , 1.25, 2.5 , 3.75, 5. , 6.25, 7.5 , 8.75])
但是,是否有一个功能允许您指定start
,step
和num
元素,同时省略stop
?应该有。
答案 0 :(得分:8)
感谢您提出这个问题。我遇到过同样的问题。 (从我的角度来看)最短最优雅的方式是:
import numpy as np
start=0
step=1.25
num=9
result=np.arange(0,num)*step+start
print(result)
返回
[ 0. 1.25 2.5 3.75 5. 6.25 7.5 8.75 10. ]
答案 1 :(得分:4)
def by_num_ele(start,step,n_elements):
return numpy.arange(start,start+step*n_elements,step)
可能?
答案 2 :(得分:4)
删除的答案指出linspace
采用endpoint
参数。
有了这个,其他答案中给出的2个例子可以写成:
In [955]: np.linspace(0, 0+(0.1*3),3,endpoint=False)
Out[955]: array([ 0. , 0.1, 0.2])
In [956]: np.linspace(0, 0+(5*3),3,endpoint=False)
Out[956]: array([ 0., 5., 10.])
In [957]: np.linspace(0, 0+(1.25*9),9,endpoint=False)
Out[957]: array([ 0. , 1.25, 2.5 , 3.75, 5. , 6.25, 7.5 , 8.75, 10. ])
查看numpy.lib.index_tricks
中定义的函数,了解有关如何生成范围和/或网格的其他想法。例如,np.ogrid[0:10:9j]
的行为类似于linspace
。
def altspace(start, step, count, endpoint=False, **kwargs):
stop = start+(step*count)
return np.linspace(start, stop, count, endpoint=endpoint, **kwargs)
答案 3 :(得分:1)
这是一个应该始终与浮动一起使用的方法。
>>> import numpy as np
>>> import itertools
>>> def my_range(start, step, num):
... return np.fromiter(itertools.count(start, step), np.float, num)
...
>>> my_range(0, 0.1, 3)
array([ 0. , 0.1, 0.2])
如果您想将其用于浮点以外的其他内容,则可以将np.float
设为arg(或kwarg):
>>> import numpy as np
>>> import itertools
>>> def my_range(start, step, num, dtype=np.float):
... return np.fromiter(itertools.count(start, step), dtype, num)
...
>>> my_range(0, 5, 3)
array([ 0., 5., 10.])
>>> my_range(0, 5, 3, dtype=np.int)
array([ 0, 5, 10])
答案 4 :(得分:1)
某些其他解决方案对我不起作用,因此,由于我已经习惯使用np.linspace
,因此我决定将一个函数替换为linspace
的{{1}}, num
参数。
step
示例输出:
def linspace(start, stop, step=1.):
"""
Like np.linspace but uses step instead of num
This is inclusive to stop, so if start=1, stop=3, step=0.5
Output is: array([1., 1.5, 2., 2.5, 3.])
"""
return np.linspace(start, stop, int((stop - start) / step + 1))
编辑:我误解了这个问题,最初的问题想要一个省略了linspace(9.5, 11.5, step=.5)
array([ 9.5, 10. , 10.5, 11. , 11.5])
参数的函数。我仍然将其保留在此处,因为我认为这对一些偶然发现该问题的人可能有用,因为它是我发现的唯一一个与我最初使用stop
,{{ 1}}和start
,而不是stop