Bibliothèque propre - & gt; initialiser la matrice avec les données du fichier ou du fichier std :: vector & lt; string & gt; contenu
Ma question est de savoir comment initialiser un propres de la Matrice, mais PAS de cette façon:
matrix << 1,0,1,0,
1,0,1,0,
1,0,1,0,
J'ai une Matrice qui ressemble à celle ci-dessus une ( des virgules ou pas de virgules n'importe pas)
stockées dans un fichier txt.
J'ai déjà écrit une fonction pour lire chaque ligne et le mettre dans un vecteur
maintenant, je veux créer une matrice avec ces données
Mais il ne travail et je ne peux pas le trouver n'importe quelle page qui explique comment affecter des données à une matrice sans écrire seulement les valeurs.(comme dans l'exemple ci-dessus)
Tout ce que je besoin est les données de mon fichier dans un propres de la Matrice
Ce que j'ai essayé jusqu'à présent: (PS: a eu l'idée avec les itérateurs, mais j'imagine que ça va prendre trop de temps avec de très grandes matrices, j'ai juste essayé de cet exemple avec un 1-2 dimensions de la matrice)
int readFromFile (const char * path, vector <string> & mv)
{
fstream file;
string line;
file.open(path);
while (getline(file,line))
{
mv.push_back(line);
}
file.close();
return 0;
}
typedef Matrix <int, 1, 2> MyMatrix;
int fromVectoEigen (vector<string> & source, MyMatrix & target)
{ //for (int i = source.size(); i<0 ; i--)
//{
string valuerow = source.back();
string::iterator it = valuerow.begin();
target.row(0)<< *it;
target.row(0)<<*it+1;
//source.pop_back();
//}
return 0;
}
Malheureusement, ne peux pas juste dire Matrix.row(i) = vector.back()
qui ne fonctionne pas.
source d'informationauteur dieHellste | 2013-12-26
Vous devez vous connecter pour publier un commentaire.
Le code suivant fonctionne avec des fichiers contenant des matrices de taille arbitraire:
Ce qui concerne.
Je viens de sortir une extension de la Eigen package qui n'certains de ce que vous voulez. Il définit l' >> de l'opérateur, de sorte que vous pouvez dire:
MatrixXd Un(5,5);
cin >> A;
Il vous permet également d'attribuer une VectorXd à l'égalité d'un std::vector. La version étendue de Eigen peut être trouvé ici. Cependant, il n'a pas (encore) de vous permettre de copier un std::vector dans un MatrixXd objet qui n'est pas un vecteur. La fonctionnalité que vous voulez est la Carte en fonction Propres.
Je crois que j'ai trouvé une solution! Son pas rapide ou efficace, mais il fonctionne:
J'ai utilisé de l'élément de sage initialisation (en supposant que nous savons nrows et nrows):
Une variation à l'aide de seulement Eigen::Map pour la cartographie des données de std::vector, basée sur des exemples de https://eigen.tuxfamily.org/dox/group__TutorialMapClass.html
Voici ma solution: