处理函数中的 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
切片)是单个值。
上面提到的包已经完成了这一切。
我正在尝试用 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
切片)是单个值。
上面提到的包已经完成了这一切。