特征广播比较

时间:2017-06-06 15:56:30

标签: c++ templates eigen

在Eigen中,我们可以比较两个数组。我们还可以使用broadcasting将(适当大小的)向量添加到矩阵中。但是,这两者并没有以明显的方式组合以允许行/列方式比较操作。例如

#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;
}

如何才能实现这种行式比较?

评论:在我看来,它应该可以很好地运作。只是一个尚未实施的情况或我遗失了什么?

1 个答案:

答案 0 :(得分:2)

每当function store(){ if(!$model->save()) redirect()->back(); return redirect()->to('#url'); } rowwise()不起作用时,您都可以使用replicate。在你的情况下:

colwise()

auto W = X.array() < l.array().replicate(X.rows(), 1);