Есть ли функция в Eigen для сравнения векторов (матриц) с использованием как относительного, так и абсолютного допуска aka numpy.allclose? Стандарт isApprox терпит неудачу, если один из векторов очень близок к нулю.Как сравнить векторы примерно в Eigen?
ответ
Нет встроенной функции, реализующей numpy.allclose, но вы легко можете написать ее самостоятельно, если это действительно то, что вам нужно. Тем не менее, я предпочел бы предложить использование isMuchSmallerThan с эталонным значением:
(a-b).isMuchSmallerThan(ref)
где исх является представителем ненулевым для вашей проблемы.
EDIT: для справки здесь является возможная реализация allclose:
template<typename DerivedA, typename DerivedB>
bool allclose(const Eigen::DenseBase<DerivedA>& a,
const Eigen::DenseBase<DerivedB>& b,
const typename DerivedA::RealScalar& rtol
= Eigen::NumTraits<typename DerivedA::RealScalar>::dummy_precision(),
const typename DerivedA::RealScalar& atol
= Eigen::NumTraits<typename DerivedA::RealScalar>::epsilon())
{
return ((a.derived() - b.derived()).array().abs()
<= (atol + rtol * b.derived().array().abs())).all();
}
isMuchSmallerThan можно использовать для абсолютного сравнения, то есть (ab) .isMuchSmallerThan (1.0, atol) эквивалентно np.allclose (a, b, 0.0, atol), поэтому для имитации np.allclose нам нужно сделать что-то вроде этого: (ab) .isMuchSmallerThan (1.0, atol) || a.isApprox (b, rtol). Я прав? – DikobrAz
Не совсем потому, что isMuchSmallerThan и isApprox основаны на матричной норме L2, а не на элементарных сравнениях (бесконечная норма). – ggael
Существует также функция isApprox, которая не работает для меня. Я просто использую (ожидаем - res) .norm() < несколько небольшое количество.
- 1. Как конкатенировать векторы в Eigen?
- 2. Eigen: конкатенирующие матрицы и векторы
- 3. Как рекурсивно сравнить векторы?
- 4. Как сравнить BigDecimal, но примерно?
- 5. Как сравнить векторы с Boost.Test?
- 6. как вычислить векторы признаков примерно для хранения в листе excel?
- 7. Как сравнить векторы простым и эффективным способом?
- 8. Как сравнить, если два тензора равны в Eigen?
- 9. Как преобразовать Eigen :: Matrix4f в Eigen :: Affine3f
- 10. Сравнить векторы и добавить недостающие элементы
- 11. Как сравнить векторы символов для частичных совпадений в R
- 12. Как использовать библиотеку Eigen в Dev C++?
- 13. Как сохранить Eigen :: DiagonalMatrix в формате MarketIO в Eigen?
- 14. Неправильная установка вектора в EIGEN
- 15. Есть ли стандартный способ сравнить векторы Clojure в «обычном» способе
- 16. Какой самый быстрый способ сравнить векторы в C++?
- 17. сложные собственные векторы
- 18. Как преобразовать вектор строки в вектор столбца в Eigen?
- 19. Как вычислить мощность матрицы, используя Eigen library?
- 20. Как расширить матрицу в Eigen?
- 21. Странный размер класса, содержащий собственные векторы
- 22. Как OpenCV использует Eigen?
- 23. Сравнить 2 Векторы неизвестной длины, чтобы найти общую ценность? - R
- 24. Различные собственные векторы и собственные значения в Eigen и Matlab могут генерировать ошибки?
- 25. Преобразование собственной матрицы в вектор Eigen
- 26. Boost :: uBLAS vs Eigen
- 27. Векторы
- 28. Увеличение точности в SelfAdjointEigenSolver in Eigen
- 29. Eigen Matrix Multiplication Speed
- 30. Более короткий способ применения преобразования к матрице, содержащей векторы в Eigen?
См. Http://eigen.tuxfamily.org/dox-2.0/TutorialCore.html – user1929959