我如何在Go中做一些像numpy的arange那样的事情?

时间:2013-11-11 12:37:12

标签: python numpy go

Numpy的arange函数返回给定间隔内具有浮动步长的均匀间隔值列表。是否有一种简短的方法来创建像Go那样的切片?

2 个答案:

答案 0 :(得分:3)

根据 val 的解决方案,我建议避免使用“x + = step”,因为根据限制和步骤,舍入错误将累积,您可能会将最后一个值保留为undefined或更糟糕的是,尝试定义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
}

http://play.golang.org/p/U67abBaBbv

答案 1 :(得分:2)

我不知道。您可以定义your own

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版本中使用否定步骤,但如果需要,您可以定义更强大的内容。