es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo ingreso matrices en una función linspace en C++?

Descargo de responsabilidad: esto no es mi especialidad.

Estoy tratando de alimentar dos matrices de 3 columnas y 1 fila diferentes en una función linspace usando el paquete NumCPP, pero me están apareciendo errores como:

“ninguna instancia de la plantilla de función ‘nc::linspace’ coincide con la lista de argumentos. Los tipos de argumentos son: (float, float, int)” <– desde el vscode intelisense y “error: no se puede convertir ‘float’ a ‘float **'” cuando se ejecuta en la terminal.

El código relacionado con este error es el siguiente:

float ** XYZ [3];
float ** function(float array_A, float array_B, int C) {
XYZ ** = nc :: linspace & amp; lt; float ** & amp; gt;(array_A, array_B, C);
return XYZ;
};

Hacia el final de mi código en la función principal, defino estos parámetros como:

float array_A [3] = {0,0,0};
float array_B [3] = {0,PI/4,0};
int C = 10000;

Hice lo mismo con Python usando la función linspace de numpy y no tuve problemas. C++ es difícil, así que cualquier ayuda es apreciada.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema aquí radica en el uso de punteros en la definición de la función. La variable float** XYZ[3] es una matriz de 3 elementos de punteros flotantes, y su uso en XYZ** = nc::linspace<float**>(array_A, array_B, C) es incorrecto.

    Para solucionar esto, puede modificar la función de la siguiente manera:

    std::vector<><float>> function(const std::vector<float>& array_A, const std::vector<float>& array_B, int C) {
        auto XYZ = nc::linspace<><float>>(array_A, array_B, C);
        return XYZ;
    }
    

    Aquí, estamos usando std::vector para representar las matrices en lugar de punteros. La función nc::linspace se llama con el parámetro de plantilla <><float>> para crear un vector de C puntos igualmente espaciados entre array_A y array_B.

    La función modificada toma dos argumentos std::vector<float> en lugar de punteros, y devuelve un vector de vectores. std::vector es una alternativa más segura y más flexible a las matrices de estilo C, y se puede cambiar de tamaño y modificar fácilmente.

    En la función principal, puede llamar a function de esta manera:

    int main() {
        std::vector<float> array_A {0, 0, 0};
        std::vector<float> array_B {0, M_PI/4, 0};
        int C = 10000;
    
        auto result = function(array_A, array_B, C);
    
        // Use la variable de resultado
        // ...
    

    Esto debería resolver los errores que estaba encontrando.</float**>

Comments are closed.