c++ - 从一维数组中反转 channel 值

标签 c++ arrays

我有一个一维数组 float64 arr[60] 用于存储来自 DAQ 的电压值。该数组是这样填充的:

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 给出的公认解决方案是:

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() 生成参数 double* const* arr2,它是存储在 channel 中的值的相反顺序。例如

[channel 0]                 [channel 1]                       [channel 5]
{val 9, val 8 ...val 0},    {val 19, val 18 ...val 10},  ...

输入可以是初始一维数组,也可以是通过模板化 make_2d() 函数构造的一维指针数组。我想知道最有效的方法是什么,因为阵列正在以 5000Hz 的速率更新。我希望有一种方法我不必从输入数组中复制值,尽管我对时间效率比空间效率更感兴趣。

目前我正在创建第二个指针数组并复制反向 channel 值。

  // 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]);
    }
  }

最佳答案

如果我理解正确,你想要的是不可能的: 您不能将指针数组传递给 func2,使其看起来好像样本的顺序相反(我假设,您不能修改 func2),但只要您不是在功率非常低的机器上工作,一些东西像这样非常便宜(在时间和空间开销方面):

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());
    }
}

关于c++ - 从一维数组中反转 channel 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31010060/

相关文章:

javascript - 如何获取每个数组中的乘法结果

php - 更快地找到数组中单词之间的最小距离

c++ - 文字运算符模板 : why not string?

c++ - 是否有通用的方法来镜像一对(pair<A,B> 到 pair<B,A>)?

c++ - 在 Microsoft Visual 2010 上安装 FLTK 1.3.2

php - JavaScript 数组到 PHP

派生类的 C++ CRTP 构造函数

c++ - 使用后递增索引的数组分配中的异常安全

.net - 如何在VB.NET中将字符串转换为字符串数组?

arrays - MongoDB中如何获取两个数组的交集($setIntersection效果不好)