doufusi2013 2018-05-31 12:44 采纳率: 0%
浏览 43
已采纳

处理函数中的N维切片

I am trying to write some machine learning code in golang. I can't figure a way to have a function deal with a slice of N dimensions, as different dimensions would need to return different types. Here is an example function that splits a 2d slice into test/training sets.

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

In python I do not need to worry about the dimensions of the array. Is there a "golang" way to deal with this?

EDIT: I understand there are not generics in golang. My question was more about solutions outside of generics such as what the accepted answer has pointed to.

  • 写回答

1条回答 默认 最新

  • dqaq59269 2018-05-31 14:39
    关注

    See for example how gorgonia.org/tensor does it: a "dense" multi-dimensional array.

    The concept is simple, define a type like:

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

    Where Dimensions holds the n dimensions of the n-dimensional array and Values is a linear storage for the values. The invariant is that the product over all Dimensions is the length of Values. You can access different dimensions using simple O(1) arithmetic. A Tensor of dimension zero (empty Dimensions slice) is a single value.

    The package mentioned above already does all this.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度