IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

multiplication d'un vecteur par un entier (rapide)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Par défaut multiplication d'un vecteur par un entier (rapide)
    Bonjour,

    je voudrais calculer rapidement les valeurs d'un vecteur B par une constante et remplir le vecteur A, puis copier la première valeur de ce vecteur (Vecteur A) dans le Vecteur C, le tout N et n fois (taille des vecteurs A et C). Le truc un peu bourrin est de faire (un code vaut mieux qu'un long discours):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    for (i=0; i<N; i++){
    		for (k=0; k<n; k++){
     
    			VecteurA[k]=3*(vecteurB[ik]);
    		}
     
    	VecteurC.at(i)=VecteurA[k1];
    }
    ...le problème, c'est que c'est long si N est grand, forcement... et dans mon cas il est grand.

    Existe t-il des optimistaions possibles ou d'autres librairies qui permettent ce genre d'opérations rapidos? J'ai vu que certaines personnes utilisent des surcharges d'operator, style :

    vecteur operator*(float a, vecteur z);
    Est-ce que c'est + rapide, ça? si oui, je comprends pas trop comment l'implémenter...

    merci pour votre aide!

  2. #2
    screetch
    Invité(e)
    Par défaut
    operator* n'est rien d'autre qu'un nom bizarre pour une fonction, il n'y a pas grand chose a gagner.

    il y a quelque chose que je ne comprends pas, quelle est la taille du vecteur A? et du vecteur B? sont elles differentes ???

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 63
    Par défaut
    Citation Envoyé par screetch Voir le message
    .

    il y a quelque chose que je ne comprends pas, quelle est la taille du vecteur A? et du vecteur B? sont elles differentes ???
    oui, N peut-être de plusieurs milions alors que n vaut 8192.

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Si ton vecteur ne doit contenir que des nombres, utilise plutôt un valarray.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    template <typename T>
    struct Multiplier
    {
    	Multiplier(T val) : m_Val(val) {}
     
    	template <typename U>
    	T operator() (U val) {
    		return val * m_Val;
    	}
     
    	T m_Val;
    };
    int main()
    {
    	std::vector<int> vectA(1000, 1); //1000 cases de 1
    	std::vector<int> vectB(vectA.begin(), vectA.end() );
     
    	std::for_each(vectB.begin(), vectB.end(), Multiplier<int>(2) );
    }
    est une implémentation classique...

Discussions similaires

  1. Multiplication d'une matrice par un vecteur
    Par dridri85 dans le forum OpenGL
    Réponses: 5
    Dernier message: 20/11/2009, 00h09
  2. Trier un vecteur par rapport à un autre
    Par jinrs dans le forum MATLAB
    Réponses: 3
    Dernier message: 07/09/2007, 15h58
  3. Faire saisir un vecteur par un utilisateur
    Par B I L K A M dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 29/05/2007, 13h46
  4. acces à un iterateur de vecteur par son index
    Par koala01 dans le forum C++
    Réponses: 11
    Dernier message: 25/11/2006, 10h17
  5. [8086] Diviser un réel par un entier
    Par sali dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/04/2006, 22h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo