Memory numpy数组在内存中是如何组织的?

Memory numpy数组在内存中是如何组织的?,memory,numpy,ctypes,Memory,Numpy,Ctypes,我试图从一个模块中获取一些数据,这个模块是一个用ctypes包装的共享对象。 数据是一个数字数组,所以我使用numpy数组来存储数据。但我知道我 不明白numpy如何在内存中组织数组 如果我有一个C函数,它将填充如下数组: int filler(int* a,int length){ int i=0; for(i=0;i<length;i++){ a[i]=i; } return 0; } 但

我试图从一个模块中获取一些数据,这个模块是一个用ctypes包装的共享对象。 数据是一个数字数组,所以我使用numpy数组来存储数据。但我知道我 不明白numpy如何在内存中组织数组

如果我有一个C函数,它将填充如下数组:

int filler(int* a,int length){
        int i=0;
        for(i=0;i<length;i++){
                a[i]=i;
        }
        return 0;
}
但是我的输出是这样的

dtype=numpy.int16
[[0 0 1 0 2 0 3 0 4 0]]
如果int是32位,这是有意义的,但我假设C int是16位(x86 intel机器中openSUSE中的GCC)。 我尝试使用32位的数据类型运行,奇怪的是,我得到了我想要的结果:

dtype=numpy.int32
[[0 1 2 3 4 5 6 7 8 9]]
为了弄清楚发生了什么,我使用int8运行,得到了以下结果:

dtype=numpy.int8
[[0 0 0 0 1 0 0 0 2 0]]
我确实看过numpy文档,但到目前为止我还没有找到答案

如果int是32,这就有意义了 位,但我想C int是16位 (x86 intel中openSUSE中的GCC) 机器)。我试着用数据类型运行 32位,奇怪的是我得到了 我想要的结果是:

一点也不奇怪:您的假设是错误的,您的机器是32位的,带有32位int和16位短int。。除非你正在做一些(相当令人钦佩的)逆向计算

检查sizeof(int)并乘以8,或者简单地将数字存储在int中并打印出来,以说服自己

dtype=numpy.int8
[[0 0 0 0 1 0 0 0 2 0]]