我希望得到:
输入:
arange(0.0,0.6,0.2)
Run Code Online (Sandbox Code Playgroud)
输出:
0.,0.4
Run Code Online (Sandbox Code Playgroud)
我想要
0.,0.2,0.4,0.6
Run Code Online (Sandbox Code Playgroud)
我如何实现使用范围或范围。如果不是什么是替代?
小智 14
获得所需输出的一种更简单的方法是在上限中添加步长。例如,
np.arange(start, end + step, step)
Run Code Online (Sandbox Code Playgroud)
也允许您包含终点。在你的情况下:
np.arange(0.0, 0.6 + 0.2, 0.2)
Run Code Online (Sandbox Code Playgroud)
会导致
array([0. , 0.2, 0.4, 0.6]).
Run Code Online (Sandbox Code Playgroud)
简而言之
我写了一个函数crange,它可以满足您的要求。在下面的例子中,orange做numpy.arange
crange(1, 1.3, 0.1) >>> [1. 1.1 1.2 1.3]
orange(1, 1.3, 0.1) >>> [1. 1.1 1.2]
crange(0.0, 0.6, 0.2) >>> [0. 0.2 0.4 0.6]
orange(0.0, 0.6, 0.2) >>> [0. 0.2 0.4]
Run Code Online (Sandbox Code Playgroud)
背景资料
我也遇到了你的问题。我通常通过添加一个小的值来快速修复它。正如Kasrâmvd在评论中提到的,这个问题有点复杂,因为 numpy.arange 中可能会出现浮点舍入错误(参见这里和这里)。
在此示例中可以发现意外行为:
>>> numpy.arange(1, 1.3, 0.1)
array([1. , 1.1, 1.2, 1.3])
Run Code Online (Sandbox Code Playgroud)
为了让自己澄清一下,如果不是特别需要,我决定停止使用numpy.arange。我改为使用我自己定义的函数orange来避免意外行为。这结合了numpy.isclose和numpy.linspace。
这是代码
够了bla bla - 这是代码^^
import numpy as np
def cust_range(*args, rtol=1e-05, atol=1e-08, include=[True, False]):
"""
Combines numpy.arange and numpy.isclose to mimic
open, half-open and closed intervals.
Avoids also floating point rounding errors as with
>>> numpy.arange(1, 1.3, 0.1)
array([1. , 1.1, 1.2, 1.3])
args: [start, ]stop, [step, ]
as in numpy.arange
rtol, atol: floats
floating point tolerance as in numpy.isclose
include: boolean list-like, length 2
if start and end point are included
"""
# process arguments
if len(args) == 1:
start = 0
stop = args[0]
step = 1
elif len(args) == 2:
start, stop = args
step = 1
else:
assert len(args) == 3
start, stop, step = tuple(args)
# determine number of segments
n = (stop-start)/step + 1
# do rounding for n
if np.isclose(n, np.round(n), rtol=rtol, atol=atol):
n = np.round(n)
# correct for start/end is exluded
if not include[0]:
n -= 1
start += step
if not include[1]:
n -= 1
stop -= step
return np.linspace(start, stop, int(n))
def crange(*args, **kwargs):
return cust_range(*args, **kwargs, include=[True, True])
def orange(*args, **kwargs):
return cust_range(*args, **kwargs, include=[True, False])
print('crange(1, 1.3, 0.1) >>>', crange(1, 1.3, 0.1))
print('orange(1, 1.3, 0.1) >>>', orange(1, 1.3, 0.1))
print('crange(0.0, 0.6, 0.2) >>>', crange(0.0, 0.6, 0.2))
print('orange(0.0, 0.6, 0.2) >>>', orange(0.0, 0.6, 0.2))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16128 次 |
| 最近记录: |