gpt4 book ai didi

c++ - 如何将元素插入具有动态大小的 ublas 矩阵

转载 作者:搜寻专家 更新时间:2023-10-31 02:24:43 27 4
gpt4 key购买 nike

尝试在最初未指定大小的矩阵中插入元素时出现运行时错误。

下面的代码为 m1 运行 finr 但为 m2 抛出错误。

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

int main () {
boost::numeric::ublas::matrix<double> m1 (1,1);
boost::numeric::ublas::matrix<double> m2;
unsigned int i = 0;
m1(i,i)=9; // This works completely
m2(i,i)=9; // This one throws error
return 0;
}

如果有人可以提供替代方案来实现这一目标,我将不胜感激。

最佳答案

正如您自己注意到的,boost::numeric::ublas::matrix 不会像 std::vector 那样自动调整自身大小。您必须在调用 operator() 之前手动调整大小,或者编写一个函数模板来为您调整大小,如下所示:

namespace ublas = boost::numeric::ublas; //just a friendly alias!

template<typename T, typename U>
void assign(ublas::matrix<T>& m,std::size_t r,std::size_t c,U const& data)
{
m.resize(std::max(m.size1(), r+1), std::max(m.size2(), c+1));
m(r, c) = data;
}

现在你可以这样做了:

int main () 
{
ublas::matrix<double> m;

assign(m, 0, 0, 9); //m(0,0) = 9;
assign(m, 3, 2, 20); //m(3,2) = 20

std::cout << m << std::endl; //prints: [4,3]((9,0,0),(0,0,0),(0,0,0),(0,0,20))
return 0;
}

Online demo

希望对您有所帮助。

关于c++ - 如何将元素插入具有动态大小的 ublas 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27719162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com