Wie man behebt, dass Eigen3 setRandom() immer die gleichen Werte erzeugt
Problem
Sie verwenden Eigen3s setRandom()-Funktion, um die Werte in einem gegebenen Vektor zu randomisieren.
Sie stellen jedoch fest, dass die von setRandom() erzeugten Zufallswerte immer gleich sind.
Beispielcode:
eigen_setrandom_same_values.cpp
#include <iostream>
#include <Eigen/Dense>
int main() {
Eigen::VectorXd v = Eigen::VectorXd::Zero(3);
v.setRandom();
std::cout << "Random vector:" << std::endl << v << std::endl;
return 0;
}Wenn Sie diesen Code mehrfach ausführen, erhalten Sie jedes Mal die gleiche Ausgabe:
eigen_setrandom_output.txt
Random vector:
0.680375
-0.211234
0.566198Lösung
Eigen3 verwendet einfach rand() aus libc, das standardmäßig immer mit dem gleichen Seed initialisiert wird.
Um einen (pseudo-)zufälligen Seed zu setzen, können Sie den folgenden Code-Schnipsel verwenden:
eigen_setrandom_seed.cpp
srand(time(0)); // Set a random seed based on the current time
Beachten Sie, dass dieser spezifische Seed nur einmal pro Sekunde wechselt.
Vollständiges Beispiel
eigen_setrandom_full.cpp
#include <iostream>
#include <Eigen/Dense>
#include <ctime>
int main() {
Eigen::VectorXd v = Eigen::VectorXd::Zero(3);
srand(time(0)); // Set a random seed based on the current time
v.setRandom();
std::cout << "Random vector:" << std::endl << v << std::endl;
return 0;
}Check out similar posts by category:
C/C++
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow