【发布时间】:2021-02-26 09:04:53
【问题描述】:
将dlib::matrix<T> 转换为dlib::matrix<S> 的好方法是什么?
比如dlib::matrix<float>变成dlib::matrix<std::complex<float> >?
编辑: 我正在寻找比这更有效的东西:
template <class T> void toComplex(const dlib::matrix<T>& matr, dlib::matrix<std::complex<T> >& res) {
res = dlib::zeros_matrix<std::complex<T> >(matr.nr(), matr.nc());
for (unsigned i = 0; i < matr.nr(); ++i) {
for (unsigned j = 0; j < matr.nc(); ++j) {
res(i,j) = std::complex<T>(matr(i,j), 0);
}
}
}
编辑2: 更干净,但不是更快的解决方案(感谢@idclev_463035818 的建议):
template <class T> void toComplex(const dlib::matrix<T>& matr, dlib::matrix<std::complex<T> >& res) {
res.set_size(matr.nr(), matr.nc());
std::copy(matr.begin(), matr.end(), res.begin());
}
【问题讨论】:
-
a
float不是complex,你需要转换元素,即复制它们 -
如果它们具有相同的尺寸也很好,除非你想做一些非常奇怪的事情。
-
@idclev463035818,当然,它需要复制。但是一个一个地复制元素是相当慢的。
-
@Surt,是的,我认为尺寸是一样的。
-
我问你一个问题,浮点数有多少位,复数有多少?