我的数据存储为
map1.join(map2)
我只对第二,第三和第四索引感兴趣。我该如何创建一个函数,使其从我拥有的测试数据中返回第一个,第二个和第三个索引作为自己的表。
例如
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 },
...
}
我们将不胜感激。我正在尝试从测试数据中读取传感器值,而我只对x,y和z方向上的加速度值感兴趣。
答案 0 :(得分:0)
您没有发布任何代码,所以我会比平时更加模糊。
如果我们创建一个由7个元素组成的数组,例如:int arr[7] = {1, 2, 3, 4, 5, 6, 7};
访问第二,第三和第四元素分别就像arr[1], arr[2], arr[3]
一样简单。
这应该有助于从现有阵列中收集数据,但是对于创建新阵列而言。我没有任何理由使用多维数组而不是3个常规数组。从这里开始,您需要做的就是找出testData中的数组数量,以便知道要分配多少,并且应该在途中。
答案 1 :(得分:0)
所以您想转置矩阵?然后以相反的顺序进行迭代
#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;
}
答案 2 :(得分: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.4f\n", 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.4f\n", testdata_xX[0], testdata_xX[1], testdata_xX[2]);
free(testdata_xX);
return 0;
}
输出:
X的测试编号1为0.4448、0.0099、0.0576
对于X 0.4448、0.0099、0.0576的测试编号2