empuje y transferencia de datos automática
Tengo una función en una biblioteca que necesita trabajar con datos provenientes de Python.
Primero, creo una tupla llamada vec3.
typedef thrust::tuple<double,double,double> vec3;
void thrust_decimation( double* x, double* y, double* z, long number_of_vertex)
{
auto data2workwith = thrust::make_tuple(x, y, z);
std::vector<vec3> local(number_of_vertex);
for (int64_t i = 0; i < number_of_vertex; i++)
{
local[i] = vec3(x[i], y[i], z[i]);
}
thrust::device_vector<vec3> keys1 = local;
thrust::device_vector<vec3> keys2(number_of_vertex);
thrust::sort(keys1.begin(), keys1.end());
thrust::transform(keys1.begin(), keys1.end(), keys2.begin(), gridTransform(gridscale));
... trabajar con local
... trabajar en x, y, z
... retornar x, y, z
}
No sé cómo transferir data2workwith. Hice un bucle, pero como tengo una gran cantidad de datos, la duración es demasiado larga ya que tengo que hacerlo dos veces.</double,double,double>
davy.ai
Para transferir datos de Python a la función de C++, puedes utilizar la API de Python C para crear una tupla en Python y pasarla como argumento a tu función de C++. Aquí tienes un ejemplo:
Dentro de la función de C++, puedes crear una
thrust::tuple
a partir de los arreglos de entrada utilizandothrust::make_tuple
. Aquí tienes la función modificada:“`c++
void thrust_decimation(double* x, double* y, double* z, long number_of_vertex)
{
// Crea una tuple a partir de los arreglos de entrada
auto data2workwith = thrust::make_tuple(x, y, z);
}
“`
Ten en cuenta que los arreglos de entrada se modifican directamente, por lo que puedes acceder a los datos modificados en Python con los mismos arreglos numpy que pasaste como entrada.