2016-11-14 25 views
-1

これがある:Eigenで2つのテンソルが等しいかどうか比較するには?

https://codeyarns.com/2016/02/16/how-to-compare-eigen-matrices-for-equality/

は、しかし、テンソルのためのisApproxはありません。

次は私がやりたいことはありません。

#include <Eigen/Core> 
#include <unsupported/Eigen/CXX11/Tensor> 
#include <array> 
#include <iostream> 

using namespace Eigen; 
using namespace std; 

int main() 
{ 
// Create 2 matrices using tensors of rank 2 
Eigen::Tensor<int, 2> a(2, 3); 
Eigen::Tensor<int, 2>* b = &a; 

cerr<<(*b==*b)<<endl; 
} 

それは賢明な比較を調整して、代わりに真/偽の谷の同じ次元のテンソルを返すため。

2つのテンソルが同一であるかどうかを確認するにはどうすればよいですか?テンソルのisApproxはありません。

私自身の関数を書くことができましたが、GPUの電源を使用できるようにしたいと考えています.EigenにはGPUサポートが組み込まれているようです。

答えて

0

いつもEigen::Mapのカップルを使用してisApproxのチェックを行うことができます。

#include <iostream> 
#include <unsupported/Eigen/CXX11/Tensor> 

using namespace Eigen; 

int main() 
{ 

    Tensor<double, 3> t(2, 3, 4); 
    Tensor<double, 3> r(2, 3, 4); 

    t.setConstant(2.1); 
    r.setConstant(2.1); 
    t(1, 2, 3) = 2.2; 
    std::cout << "Size: " << r.size() << "\n"; 
    std::cout << "t: " << t << "\n"; 
    std::cout << "r: " << r << "\n"; 

    Map<VectorXd> mt(t.data(), t.size()); 
    Map<VectorXd> mr(r.data(), r.size()); 

    std::cout << "Default isApprox: " << mt.isApprox(mr) << "\n"; 
    std::cout << "Coarse isApprox: " << mt.isApprox(mr, 0.11) << "\n"; 

    return 0; 
} 

P.S./N.B。 EigenのGPUサポートの構築について...最後に、それはかなり限定されており、正当な理由があることを確認しました。 GPUのダイナミックアロケーションは実際には風邪のように避けたいものです(ペストのようなものではないにしても)。 私はそれを取り戻す。 TensorモジュールがGPUをうまくサポートしているようです。これはブール値が含まれているランク0(すなわちスカラー)のテンソルを返します Tensor<bool, 0> eq = (A==B).all();

1

2つのテンソルAとBの正確な比較のために、あなたはブールの減少が続く比較演算子を使用することができます値はAの各係数がBの対応する係数と等しい場合に真です。

追加するのは難しくありませんが、現時点ではおおよその比較はありません。

+0

テンソルとスカラー・エレクトロメーターをどのように比較できますか? Tensor eq =(A> 0).all();エラーを返す –

関連する問題