C 数据格式重做



>我有数据存储为

float testdata3[][7] = {
{171032, 0.4448, -0.3032, -0.7655, -1.3428, 13.5803, -73.0743},
{172292, 0.0099, 0.1470, -0.7301, -17.2272, 7.0038, -11.7722},
{173547, 0.0576, 0.1333, -0.8163, -2.7847, -9.5215, 8.1177 },
...
}

我只对第二、第三和第四个指数感兴趣。我如何创建一个函数,例如它将从我拥有的测试数据中返回第一个、第二个和第三个索引作为他们自己的表。

例如

testdata_x = {0.4448, 0.099, 0.0576, ...}
testdata_y = {-0.3032, 0.1470, 0.1333, ...}
testdata_z = {-0.7655, -0.7301, -0.8163, ...}

帮助将不胜感激。我正在尝试从测试数据中读取传感器值,并且只对 x、y 和 z 方向的加速度值感兴趣。

你没有发布任何代码,所以我会比平时更模糊一些。

如果我们创建一个包含 7 个元素的数组,例如:int arr[7] = {1, 2, 3, 4, 5, 6, 7};

访问第 2、3 和第 4 个元素分别像arr[1], arr[2], arr[3]一样简单。

这应该有助于从现有数组中收集数据,但至于制作新数组。我认为没有任何理由使用多维数组而不是 3 个常规数组。您需要做的就是找出 testData 中的数组数量,以便知道要分配多少,您应该在路上。

所以你想转置一个矩阵? 然后以相反的顺序迭代

#include <stdio.h>
int main(void)
{
double arr[][7] = {
{171032, 0.4448, -0.3032, -0.7655, -1.3428, 13.5803, -73.0743},
{172292, 0.0099, 0.1470, -0.7301, -17.2272, 7.0038, -11.7722},
{173547, 0.0576, 0.1333, -0.8163, -2.7847, -9.5215, 8.1177},
};
#define ROWS sizeof arr / sizeof arr[0]
#define COLS sizeof arr[0] / sizeof arr[0][0]
double test[COLS][ROWS]; /* 7 x 3 */
for (size_t i = 0; i < COLS; i++) {
for (size_t j = 0; j < ROWS; j++) {
test[i][j] = arr[j][i];
}
}
return 0;
}

我不知道你在找什么,但这里有几种方法从最简单的方法开始:

1( 您可以使用索引直接为新数组赋值

2(如果你需要函数,你可以在里面分配新的数组,分配所有 值并从函数返回

假设索引永远不会为 x,y,z 更改。

#include <stdio.h>
#include <stdlib.h>
enum
{
X,
Y,
Z
};
float testdata3[][7] = {
{171032, 0.4448, -0.3032, -0.7655, -1.3428, 13.5803, -73.0743},
{172292, 0.0099, 0.1470, -0.7301, -17.2272, 7.0038, -11.7722},
{173547, 0.0576, 0.1333, -0.8163, -2.7847, -9.5215, 8.1177 },
};
float *get_dataa(int coordinate)
{
float *data;
switch(coordinate) {
case X:
data = malloc(sizeof(float) * 3);
data[0] = testdata3[0][1];
data[1] = testdata3[1][1];
data[2] = testdata3[2][1];
return data;
default:
return NULL;
}
}
int main(void)
{
/* first way */
float testdata_X[] = { testdata3[0][1], testdata3[1][1], testdata3[2][1] };
printf("Test number 1 for X %0.4f, %0.4f, %0.4fn", testdata_X[0], testdata_X[1], testdata_X[2]);
/* second */
float *testdata_xX = get_dataa(X);
printf("Test number 2 for X %0.4f, %0.4f, %0.4fn", testdata_xX[0], testdata_xX[1], testdata_xX[2]);
free(testdata_xX);
return 0;
}

输出:

X 0.4448、0.0099、0.0576 的测试编号 1

X 0.4448、0.0099、0.0576 的测试编号 2

最新更新