簡體   English   中英

我如何在 Go 中做類似 numpy 的 arange 之類的事情?

[英]How do I do something like numpy's arange in Go?

Numpy 的 arange 函數返回給定間隔內具有浮動步長的均勻間隔值的列表。 有沒有一種簡短的方法可以在 Go 中創建這樣的切片?

基於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
}

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

沒有我所知道的。 您可以定義自己的

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 版本中使用否定步驟,但是如果需要,您可以定義一些更健壯的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM