处理函数中的N维切片

时间:2018-05-31 12:44:57

标签: go slice n-dimensional

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

1 个答案:

答案 0 :(得分:1)

参见例如gorgonia.org/tensor如何做到这一点:“密集”的多维数组。

概念很简单,定义类似的类型:

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切片)是单个值。

上面提到的包已经完成了所有这些。