【问题标题】:Dealing with N-Dimensional slices in functions在函数中处理 N 维切片
【发布时间】:2018-05-31 12:44:56
【问题描述】:

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

【问题讨论】:

  • 不,没有通用的方法。对不起。
  • 我发现这个提案文档 (go.googlesource.com/proposal/+/master/design/6282-table-data.md) 有几个有趣的变通方法,但是 NO 没有通用的方法。
  • 谢谢,这篇文章是来自 gonum 的开发者,它是 numpy 的 golang 风格,所以正是我要找的。​​span>

标签: go slice n-dimensional


【解决方案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 切片)是单个值。

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

【讨论】:

  • 谢谢,这似乎是迄今为止在 golang 中最好的解决方案!
猜你喜欢
  • 1970-01-01
  • 2022-12-14
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 2014-03-18
相关资源
最近更新 更多