Numpy 的 arange 函数返回给定间隔内的均匀间隔值的列表,其中包含浮动步长。有没有一种简单的方法可以在 Go 中创建像这样的切片?
问问题
1714 次
2 回答
4
基于val的解决方案,我建议避免使用“x+=step”,因为根据限制和步骤,舍入误差会累积,您可能会留下最后一个值未定义或更糟,尝试定义 N+1值,引起恐慌。
这可以通过以下方式解决:
func arange2(start, stop, step float64) []float64 {
N := int(math.Ceil((stop - start) / step))
rnge := make([]float64, N)
for x := range rnge {
rnge[x] = start + step*float64(x)
}
return rnge
}
于 2013-11-12T07:13:07.533 回答
2
没有我知道的。您可以定义自己的:
import "math"
func arange(start, stop, step float64) []float64 {
N := int(math.Ceil((stop - start) / step));
rnge := make([]float64, N, N)
i := 0
for x := start; x < stop; x += step {
rnge[i] = x;
i += 1
}
return rnge
}
返回:
arange(0., 10., 0.5)
[0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 7.5 8 8.5 9 9.5]
对应Python:
>>> np.arange(0., 10., 0.5)
array([ 0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. ,
5.5, 6. , 6.5, 7. , 7.5, 8. , 8.5, 9. , 9.5])
请注意,由于我定义迭代的方式,您不能在我的简单 Go 版本中使用负步骤,但如果需要,您可以定义一些更健壮的东西。
于 2013-11-11T14:00:40.517 回答