0

我正在尝试用 golang 编写一些机器学习代码。我想不出一种方法让函数处理 N 维的切片,因为不同的维度需要返回不同的类型。这是一个将 2d 切片拆分为测试/训练集的示例函数。

func SplitData(data [][]int, testPerc float32) ([][]int, [][]int)  {
    size := len(data)
    testSlice := int(float32(size) * testPerc)
    return data[0:testSlice], data[testSlice:]
}

在 python 中,我不需要担心数组的维度。有没有“golang”的方式来处理这个问题?

编辑:我知道 golang 中没有泛型。我的问题更多是关于泛型之外的解决方案,例如公认的答案所指向的。

4

1 回答 1

1

例如看看gorgonia.org/tensor它是怎么做的:一个“密集”的多维数组。

这个概念很简单,定义一个像这样的类型:

type Tensor struct {
    Dimensions []int // e.g. {2, 2}
    Values     []int // e.g. {1, 2, 3, 4}
}

whereDimensions保存 n 维数组的 n 维,并且Values是值的线性存储。不变量是乘积总体上Dimensions是 的长度Values。您可以使用简单的 O(1) 算法访问不同的维度。零维张量(空Dimensions切片)是单个值。

上面提到的包已经完成了这一切。

于 2018-05-31T14:39:20.627 回答