【发布时间】:2021-12-06 12:53:42
【问题描述】:
我正在尝试使用 catboost 来预测一组浮点数。
在CalcModelPredictionSingle 的文档中,它以"floatFeatures - array of float features" 为参数:
https://github.com/catboost/catboost/blob/master/catboost/libs/model_interface/c_api.h#L175
但是,当我尝试传递一个浮点数组时,我得到了这个错误:
Cannot use type []*_Ctype_float as *_Ctype_float in assignment.
表示它期待一个浮点数。我是不是用错了函数?
我正在使用 cgo,这是我的代码的一部分:
```
floats := []float32{}
//gets populated
floatsC := make([]*C.float, len(floats))
for i, v := range floats {
floatsC[i] = (*C.float)(&v)
}
if !C.CalcModelPredictionSingle(
model.Handle,
([]*C.float)(floatsC),
...
) {
return
}
【问题讨论】:
-
在 C 中,指向浮点数的指针与指向浮点数数组的第一个元素的指针(在传递给函数之后)无法区分,问题必须在进行中......跨度>
-
@GradyPlayer 事实上,事实上(作为一个参数)C 将“T 的数组 N”与“指向 T 的指针”混为一谈,而 Go 没有,这就是问题所在。正如 rustyx 回答的那样,诀窍是使用 Go 数组或切片并获取指向第一个元素的指针,这只是手动表达 C 编译器在调用者处所做的事情。
标签: c go catboost catboostregressor