处理函数中的 N 维切片

Dealing with N-Dimensional slices in functions

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

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 中没有泛型。我的问题更多是关于泛型之外的解决方案,例如已接受的答案所指向的内容。

查看 gorgonia.org/tensor 如何实现的示例:"dense" 多维数组。

概念很简单,定义一个类型如下:

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

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

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