Самый быстрый способ извлечения элементов таблицы на C++? [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Самый быстрый способ извлечения элементов таблицы на C++? [закрыто]

Сообщение Anonymous »

Я ищу код C++, позволяющий очень быстро извлекать элементы таблицы. Реальный код имеет дело с многочисленными извлечениями пар строк некоторой таблицы, проверяет какое-то очень редкое условие и, если да, приступает к некоторым вычислениям, включая модификацию строк таблицы и даже ее длины. Проблема в том, что извлечение элементов занимает 95% времени.
Приведенный ниже код создан с помощью ChatGPT, где я опускаю процедуру, выполняя нетривиальную задачу — просто извлечение элементов. :

Код: Выделить всё

#include "pch.h"
#include "WolframLibrary.h"
#include    // For std::memcpy
#include    // For std::rand() and std::srand()
#include      // For std::time()

// Initialization function
EXTERN_C DLLEXPORT int WolframLibrary_initialize(WolframLibraryData libData) {
// Seed the random number generator with current time
std::srand(static_cast(std::time(nullptr)));
return LIBRARY_NO_ERROR;
}

// Uninitialization function
EXTERN_C DLLEXPORT void WolframLibrary_uninitialize(WolframLibraryData libData) {}

// The main function implementing TestCode
EXTERN_C DLLEXPORT int TestCode(WolframLibraryData libData, mint Argc, MArgument *Args, MArgument Res) {
// Extract inputs
MTensor dataTensor = MArgument_getMTensor(Args[0]);
mint Nsampled = MArgument_getInteger(Args[1]);

// Get dimensions
mint* dims = libData->MTensor_getDimensions(dataTensor);
mint len = dims[0];
mint dim2 = dims[1];

// Access the data
double* data = libData->MTensor_getRealData(dataTensor);

// Prepare output (copy of data)
MTensor datanew1Tensor;
mint outDims[2] = {len, dim2};
libData->MTensor_new(MType_Real, 2, outDims, &datanew1Tensor);
double* datanew1 = libData->MTensor_getRealData(datanew1Tensor);
std::memcpy(datanew1, data, sizeof(double) * len * dim2); // Use std::memcpy

// Variables
int n1, n2;
double type1, type2, e1, e2;
int indextype = 1; // or pass as an argument
int indexE = 2;     // or pass as an argument

for (mint i = 0; i < Nsampled; ++i) {
// Random index generation (1-based indexing)
n1 = 1 + (std::rand() % len);
do {
n2 = 1 + (std::rand() % len);
} while (n2 == n1);

// Extract types and energies
double val1 = datanew1[(n1 - 1) * dim2 + (indextype - 1)];
double val2 = datanew1[(n2 - 1) * dim2 + (indextype - 1)];
type1 = (2 * (std::rand() % 2) - 1.0) * ((n1 

Подробнее здесь: [url]https://stackoverflow.com/questions/79079380/the-fastest-way-of-extracting-table-elements-in-c[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»