如何将 boost::numeric::ublas::vector 复制到矩阵?

发布于 2025-01-08 08:44:30 字数 826 浏览 0 评论 0原文

我在这里做错了什么?

// file main.cpp

#include <iostream>
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>

namespace ublas = boost::numeric::ublas;

int main()
{
    ublas::vector<double> const v( 10 );
    ublas::matrix<double> m( 1, v.size() );
    ublas::matrix_row<ublas::matrix<double> > r( m, 1 );
    r = v;
    return 0;
}

这失败并显示消息:

Check failed in file /usr/local/include/boost/numeric/ublas/functional.hpp at line 1370:
i < size_i
terminate called after throwing an instance of 'boost::numeric::ublas::bad_index'
  what():  bad index
Aborted

但是,是否有更简洁的方法将 v 转换为 main.cpp 处的 m

What am I doing wrong here?

// file main.cpp

#include <iostream>
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>

namespace ublas = boost::numeric::ublas;

int main()
{
    ublas::vector<double> const v( 10 );
    ublas::matrix<double> m( 1, v.size() );
    ublas::matrix_row<ublas::matrix<double> > r( m, 1 );
    r = v;
    return 0;
}

This fails with message:

Check failed in file /usr/local/include/boost/numeric/ublas/functional.hpp at line 1370:
i < size_i
terminate called after throwing an instance of 'boost::numeric::ublas::bad_index'
  what():  bad index
Aborted

However, is there more laconic way to v into m at main.cpp?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心碎的声音 2025-01-15 08:44:30

这不起作用吗?

std::copy(v.begin(), v.end(), m.begin1());

这将占用 m 的第一个 v.size() 元素,其值为 v。

以下代码在我的系统上编译并运行(boost 1.48 和 g++ 4.62)

#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <algorithm>

int main()
{
    boost::numeric::ublas::vector<int> v(10);
    boost::numeric::ublas::matrix<int> m(10,10);  //using v.size() also works
    std::copy(v.begin(), v.end(), m.begin1());
    return 0;
}

Did this not work?

std::copy(v.begin(), v.end(), m.begin1());

this will occupy the first v.size() elements of m with the value of v.

The following code compiles and runs on my system (boost 1.48 and g++ 4.62)

#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <algorithm>

int main()
{
    boost::numeric::ublas::vector<int> v(10);
    boost::numeric::ublas::matrix<int> m(10,10);  //using v.size() also works
    std::copy(v.begin(), v.end(), m.begin1());
    return 0;
}
很酷又爱笑 2025-01-15 08:44:30

当然,您正在尝试访问 1 xv,size() 矩阵中不存在的第一行。你应该写:

ublas::matrix_row<ublas::matrix<double> > r( m, 0 );

虽然你会更好

row(m, 0) = v;

Of course, you're trying to access 1st row which just isn't there for 1 x v,size() matrix. You should write:

ublas::matrix_row<ublas::matrix<double> > r( m, 0 );

though you'd be better with

row(m, 0) = v;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文