Multiplication vecteur par un vecteur de vecteur
Bonjour,
j'ai un vecteur de vecteur. je veux multiplier chaque vecteur par un autre vecteur de perturbation. le problème c'est que mon code prend que le premier vecteur du vecteur et le multiplie avec toute les valeurs du vecteur de perturbation. donc je croix qu'il y a un problème au niveau du boucle. voici le code:
void test::perturberData()
{
float w=0.0;
vector<float> nombres;
float x;
for(int i=0;i<4;i++)
{
cout << "Entrez les valeurs du vecteur "<<endl;
cin >> x;
nombres.push_back(x);
}
for(int i=0;i<this->nb_parametres;i++)
{
for(int k=0;k<this->dataset.size();k++){
vector<float> colonnei=dataset->at(k);
for(int j=0;j<colonnei.size();j++){
w=nombres.at(i)*colonnei.at(j);
this->perturbativeData[data_pos].push_back(w);}
}}
}
j'ai un vecteur de vecteur. je veux multiplier chaque vecteur par un autre vecteur de perturbation. le problème c'est que mon code prend que le premier vecteur du vecteur et le multiplie avec toute les valeurs du vecteur de perturbation. donc je croix qu'il y a un problème au niveau du boucle. voici le code:
void test::perturberData()
{
float w=0.0;
vector<float> nombres;
float x;
for(int i=0;i<4;i++)
{
cout << "Entrez les valeurs du vecteur "<<endl;
cin >> x;
nombres.push_back(x);
}
for(int i=0;i<this->nb_parametres;i++)
{
for(int k=0;k<this->dataset.size();k++){
vector<float> colonnei=dataset->at(k);
for(int j=0;j<colonnei.size();j++){
w=nombres.at(i)*colonnei.at(j);
this->perturbativeData[data_pos].push_back(w);}
}}
}
A voir également:
- Multiplication vecteur par vecteur
- Application multiplication - Télécharger - Études & Formations
- Vecteur sur word - Forum Graphisme
- Transform.position d'un object dans un vecteur - Forum C#
- Signe multiplication clavier ✓ - Forum Windows
- 7 fois 8 table de multiplication - Télécharger - Études & Formations
1 réponse
Je n'ai pas compris ce que tu appelles un produit de vecteur. En admettant qu'il s'agisse d'un produit scalaire il suffit de définir une fonction qui calcule le produit scalaire de deux vecteurs :
... ce qui donne :
Après tu peux dire que l'opérateur * sur deux vecteurs effectue un produit scalaire. Tant qu'à faire on peut même définir sur des vecteurs génériques.
Bonne chance
#include <iostream> #include <ostream> #include <vector> double produit_scalaire( const std::vector<double> & x, const std::vector<double> & y ){ double res = 0; size_t size = x.size(); if (x.size() != y.size()) throw; for (size_t i = 0; i < size; ++i) { res += x[i] * y[i]; } return res; } std::ostream & operator << ( std::ostream & out, const std::vector<double> & x ) { out << '['; for (size_t i = 0; i < x.size(); ++i) { out << ' ' << x[i]; } out << " ]"; return out; } int main() { std::vector<double> x, y; x.push_back(1); x.push_back(5); x.push_back(3); y.push_back(2); y.push_back(0); y.push_back(4); std::cout << "produit_scalaire(" << x << ", " << y << ") = " << produit_scalaire(x, y) << std::endl; return 0; }
... ce qui donne :
produit_scalaire([ 1 5 3 ], [ 2 0 4 ]) = 14
Après tu peux dire que l'opérateur * sur deux vecteurs effectue un produit scalaire. Tant qu'à faire on peut même définir sur des vecteurs génériques.
// x * y <=> produit_scalaire(x, y); template <typename T> T operator * ( const std::vector<T> & x, const std::vector<T> & y ) { T res; size_t size = x.size(); if (x.size() != y.size()) throw; for (size_t i = 0; i < size; ++i) { res += x[i] * y[i]; } return res; }
Bonne chance