首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一维阵列的反向通道值

一维阵列的反向通道值
EN

Stack Overflow用户
提问于 2015-06-23 17:57:19
回答 1查看 69关注 0票数 0

我有一个一维阵列float64 arr60用于存储来自DAQ的电压值。数组的填充方式如下:

代码语言:javascript
运行
复制
10 SAMPLES_PER_CHANNEL, 6 CHANNELS, grouped by channel
transducer_0    transducer_1   ...  transducer_6
[0, 1 ..., 9,   10, 11 ..., 19 ...  50, 51 ..., 59]

我希望将这些数据存储到一维指针数组中,并传递给定义为:bool func2(int samples, double* const* arr2)的函数。

我在this post中提出了一个类似的问题,@Yakk给出的解决方案是:

代码语言:javascript
运行
复制
template<size_t stride, class T, size_t N, size_t count = N/stride>
std::array<T*, count> make_2d( T(&raw)[N] ) {
  std::array<T*, count> retval;
  for (size_t i = 0; i < count; ++i)
    retval[i] = raw + i*stride;
  return retval;
}

我正在寻找帮助为func2()生成参数func2(),这是存储在通道中的值的相反顺序。例如。

代码语言:javascript
运行
复制
[channel 0]                 [channel 1]                       [channel 5]
{val 9, val 8 ...val 0},    {val 19, val 18 ...val 10},  ...

输入可以是初始的一维数组,也可以是通过模板化的make_2d()函数构造的一维指针数组。我想知道什么是最有效的方法来做到这一点,因为阵列正在以5000赫兹的速度更新。我希望有一种方式,我将不必复制值从输入数组,虽然我更感兴趣的是时间效率,而不是空间效率。

当前,我正在创建第二个指针数组,并在其中复制反向通道值。

代码语言:javascript
运行
复制
  // DOF == 6, SAMPLES_PER_CHANNEL = 10
  double ch0[SAMPLES_PER_CHANNEL];
  double ch1[SAMPLES_PER_CHANNEL];
  double ch2[SAMPLES_PER_CHANNEL];
  double ch3[SAMPLES_PER_CHANNEL];
  double ch4[SAMPLES_PER_CHANNEL];
  double ch5[SAMPLES_PER_CHANNEL];
  double* data_rev[DOF] = {
  ch0, ch1, ch2, ch3, ch4, ch5};

  // generate reversed order array
  for (int i = DOF - 1; i > 0; --i) {
    for (int j = SAMPLES_PER_CHANNEL - 1; j > 0; --j) {
      data_rev[DOF - 1 - i][SAMPLES_PER_CHANNEL - 1 - j] = static_cast<double>(data[(i*10)+j]);
    }
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-23 19:24:43

如果我正确地理解了您的意思,那么您想要的是不可能的:您不能将一系列指针传递到func2,使之看起来就好像示例将处于相反的顺序(我猜想,您不能修改func2),但是只要您不是在一台非常低功耗的机器上工作,这样的操作就非常便宜(在时间和空间开销上都是如此):

代码语言:javascript
运行
复制
double arr[60];
std::array<double,60> tmp;

int main() {
    auto t = make_2d<10>(tmp);
    std::reverse(t.begin(), t.end());

    while (true) {
        readData(arr, 60);
        reverse_copy(begin(arr),end(arr), begin(tmp));
        func2(60, t.data());
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31010060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档