gpt4 book ai didi

c++ - 抽取 Eigen vector

转载 作者:行者123 更新时间:2023-11-28 06:17:37 25 4
gpt4 key购买 nike

我有一个 float 组 Eigen::ArrayXf,我需要对其进行抽取(即从 f.i. 8 个样本中选择 1 个)。

Eigen::ArrayXf decimatedSignal = Eigen::Map<Eigen::ArrayXf, 0, Eigen::InnerStride<8> >(signal.data(), length, 1).eval();

这是有效的,但有一个警告:我需要知道 length 有多长,它可能指定得太长,导致运行时错误。

问:有没有一种方法可以减少所有可能的长度,使得结果长度为 == signal.size()/8 ?

最佳答案

两件事。您正在使用 c'tor用于映射矩阵:

Map ( PointerArgType dataPtr, Index nbRows, Index nbCols, const StrideType & a_stride = StrideType() )

Constructor in the dynamic-size matrix case.

Parameters

dataPtr  pointer to the array to map
nbRows the number of rows of the matrix expression
nbCols the number of columns of the matrix expression
a_stride optional Stride object, passing the strides.

我想你想要一个 vector 的c'tor:

Map ( PointerArgType dataPtr, Index a_size, const StrideType & a_stride = StrideType() )

Constructor in the dynamic-size vector case.

Parameters

dataPtr  pointer to the array to map
a_size the size of the vector expression
a_stride optional Stride object, passing the strides.

第二件事是你想要 length == signal.size())/8。那总是一个完整的整数,还是四舍五入?如果数据的长度为 16,并且您想要位置 [0][8],则使用 1+(signal.size()-1)/8 作为长度参数:

Eigen::ArrayXf decimatedSignal = Eigen::Map<Eigen::ArrayXf, 0, Eigen::InnerStride<8> >(signal.data(), 1+((signal.size()-1)/8) ).eval();

例如:

#include <Eigen/Core>
#include <iostream>

using std::cout;
using std::endl;

int main(int argc, char *argv[])
{
Eigen::VectorXf signal;
signal.setLinSpaced(64, 0.0, 63.);
cout << "Original signal:" << endl << signal.transpose() << endl;

Eigen::ArrayXf decimatedSignal = Eigen::Map<Eigen::ArrayXf, 0,
Eigen::InnerStride<8> >(signal.data(), 1+((signal.size()-1)/8)).eval();

cout << endl << "Decimated:" << endl << decimatedSignal.transpose() << endl;

return 0;
}

输出

Original signal: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

Decimated: 0 8 16 24 32 40 48 56

我认为这正是您想要的。

关于c++ - 抽取 Eigen vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29939587/

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