Numpy Like C数组

时间:2017-11-06 05:46:35

标签: c numpy

在numpy中,您可以使用array.sizearray.shape访问数组的大小和形状,而可以使用array[i]访问元素。

如何用C结构实现这一目标?人们可以做类似

的事情
struct{
    int size;
    int shape[2];
    int *elements;
} int_array;

但是元素可以作为

访问
int_array.elements[i].

不喜欢numpy。

我怎样才能有一个存储大小和形状的数组,但是可以使用[]以常规方式访问其元素?

2 个答案:

答案 0 :(得分:2)

  1. 分配比您需要的大3个单元格的数组。
  2. 在前3个单元格中放置大小和形状
  3. 将指针递增3 * sizeof(int)
  4. 为大小和形状编写访问器。
  5. 然后您可以通常的方式访问该数组。

    在释放之前,不要忘记从指针中减去3 * sizeof(int)

答案 1 :(得分:1)

您可以使用简单的宏将指针转换为2D数组(source):

#define INDEX(a) ((int(*)[a.shape[1]]) a.elements)

您可以将其用作

#include <stdio.h>
#include <stdlib.h>

typedef struct{
    int size;
    int shape[2];
    int *elements;
} int_array;


int main() {
    int_array arr;
    arr.shape[0] = 2;
    arr.shape[1] = 3;
    arr.elements = malloc(6*sizeof(*arr.elements));

    INDEX(arr)[0][1] = 2;

    printf("%d", INDEX(arr)[0][1]);
}