1
Eigenでは、2つの配列をコンポーネントごとに比較できます。 broadcastingを使用して、適切なサイズのベクトルを行列に追加することもできます。しかし、これらの2つは、行/列ごとの比較操作を可能にする明らかな方法で結合しません。たとえば、固有ブロードキャスト比較
#include <iostream>
#include <Eigen/Core>
using namespace std;
using namespace Eigen;
using vect_t = Matrix<double, 1, 3>;
using matr_t = Matrix<double, 5, 3>;
int main()
{
vect_t l(0.1,0.1,0.1);
vect_t u(0.3,0.3,0.3);
matr_t X;
X << 0.0, 0.0, 0.0,
0.1, 0.2, 0.1,
0.2, 0.2, 0.2,
1.0, 0.0, 0.2,
0.2, 0.4, 0.4;
auto Y = l.array() < u.array(); // okay, gives [1, 1, 1]
auto Z = X.array().rowwise() + l.array();
// okay, gives
// 0.1, 0.1, 0.1,
// 0.2, 0.3, 0.2,
// 0.3, 0.3, 0.3,
// 1.1, 0.1, 0.3,
// 0.3, 0.5, 0.5;
//auto W = X.array().rowwise() < l.array(); // does not compile
// would expect (via broadcasting) something like
// 1, 1, 1,
// 0, 0, 0,
// 0, 0, 0,
// 0, 1, 0,
// 0, 0, 0
cout << X << endl << endl;
cout << Y << endl << endl;
cout << Z << endl << endl;
//cout << W << endl << endl;
return 0;
}
このような行比較はどのように実現できますか?
コメント:これはうまく動作するはずです。それはまだ実装されていないか、何か不足していますか?
おかげで再び@chtz。他の方法ではなく、このようにパフォーマンスを考慮する必要がありますか? – Dan
最適化でコンパイルすると 'replicate'構文は' colwise'/'rowwise'変種(両方が可能な場合)と同じコードになります。違いをどこかに通知すると、バグと見なされます。 – chtz