Построить Arrow DoubleArray из двойного указателя

У меня есть двумерный двойной указатель массива. Я могу бросить это u_int8_tПринеси это mutable_data() Arrow Pool Buffer и создайте Arrow DoubleArray. Тем не менее, когда я получаю значение от 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;
}

Спасибо

0

Решение

Следующая строка не делает то, что вы думаете:

*data->mutable_data() = *ui_generatedDouble;

Он только копирует первый байт данных. Вы хотите скопировать весь буфер:

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector