C数据格式重做

时间:2018-10-23 17:53:18

标签: c arrays

我的数据存储为

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方向上的加速度值感兴趣。

3 个答案:

答案 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