Memory numpy数组在内存中是如何组织的?
我试图从一个模块中获取一些数据,这个模块是一个用ctypes包装的共享对象。 数据是一个数字数组,所以我使用numpy数组来存储数据。但我知道我 不明白numpy如何在内存中组织数组 如果我有一个C函数,它将填充如下数组: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; } 但
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]]