【问题标题】:Construct an Arrow DoubleArray from double pointer [closed]从双指针构造箭头 DoubleArray [关闭]
【发布时间】:2018-05-28 04:24:19
【问题描述】:

我有一个二维双精度数组指针。我可以将其转换为u_int8_t,将其提取到箭头池缓冲区的mutable_data(),并构造一个箭头双数组。但是,当我从数组的Value()raw_values() 中获取值时,我无法获得正确的数字。有人请看我的代码并帮助我:

double* generateDoubleArray() {
    int totalColumns = 200;
    int totalRows = 200;
    std::random_device r;
    std::default_random_engine e1(r());
    std::normal_distribution<double> nor_dist(-1, 1);

    double *A = static_cast<double *>(malloc(totalColumns * totalRows * sizeof(double *)));
    for (int i = 0; i < totalRows; i++) {
        for (int j = 0; j < totalColumns; j++) {
            A[i*totalColumns + j] = sin(nor_dist(e1)) + exp(sin(nor_dist(e1)) + cos(nor_dist(e1)));
        }
    }

    return A;
}
int main()
{
    double* generatedDouble = generateDoubleArray();
    uint8_t *ui_generatedDouble = (uint8_t*)generatedDouble;
    arrow::MemoryPool* pool_;
    pool_ = arrow::default_memory_pool();
    auto data = std::make_shared<arrow::PoolBuffer>(pool_);
    size_t length = 200 * 200;
    const size_t data_nbytes = length * sizeof(double *);

    data->Resize(data_nbytes);
    *data->mutable_data() = *ui_generatedDouble;
    auto out = std::make_shared<arrow::DoubleArray>(data_nbytes, data);

    double test_value = out->Value(0); // The returned value is not correct

    return 0;
}

谢谢

【问题讨论】:

    标签: c++ apache-arrow


    【解决方案1】:

    下面这行并不符合你的想法:

    *data->mutable_data() = *ui_generatedDouble;
    

    它只复制数据的第一个字节。你想 memcopy 整个缓冲区:

    std::memcpy(data->mutable_data(), ui_generatedDouble, data_nbytes);
    

    【讨论】:

    • 非常感谢!我试过你的方法,它有效。
    猜你喜欢
    • 2012-05-23
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    相关资源
    最近更新 更多