使用从其他库或工具分配的内存的NumPy数组

我想将任何感兴趣的人指向一个描述一个博客文章
具有指向内存的数组的有用模式
由与标准管理器不同的内存管理器创建
numpy.该模式显示了如何创建指向的数组
以前分配的内存,然后显示如何构造对象
这允许当numpy数组为
释放.
如果您包装有自己的内存的代码,这可能很有用
管理方案.欢迎评论和反馈.
该帖子是http://blog.therquecn.com/?p=62
此致,
-Travis Oliphant

# 回答1


在9月10日,6:39*AM,Travis Oliphant 这是我发现有用的类似的东西:
标准库中将有一个新模块称为
"多处理"(参见奶酪商店中的PyProcessing包).它
允许您扭动多个过程(而不是线程)
SMP的并发(参见可怕的吉尔).
"多处理"模块让我们将CTYPES对象放在共享中
内存段(processing.Array和Processing.Value).有它
自己的malloc,因此对象大小没有4K(一页)下限.
这是我们可以制作numpy ndarray查看共享内存的方式
参考是这些对象:
尝试:
导入处理
除了:
导入多处理作为处理
导入numpy,ctypes
_ctypes_to_numpy = {
ctypes.c_char:numpy.int8,
ctypes.c_wchar:numpy.int16,
ctypes.c_byte:numpy.int8,
ctypes.c_ubyte:numpy.uint8,
ctypes.c_short:numpy.int16,
ctypes.c_ushort:numpy.uint16,
ctypes.c_int:numpy.int32,
ctypes.c_uint:numpy.int32,
ctypes.c_long:numpy.int32,
ctypes.c_ulong:numpy.int32,
ctypes.c_float:numpy.float32,
ctypes.c_double:numpy.float64
}
def shmem_as_ndarray(array_or_value):
"""查看processing.Array或Processing.Value为ndarray".
obj = array_or_value._obj
buf = obj._wrapper.getView()
尝试:
t = _ctypes_to_numpy [type(obj)]
返回numpy.frombuffer(buf,dtype = t,count = 1)
除了KeyError:
t = _ctypes_to_numpy [obj._type_]
返回numpy.frombuffer(buf,dtype = t)
使用这个简单的工具,我们可以通过多处理创建的过程
使用引用相同共享内存段的ndarrays.我是
对此进行一些可伸缩性测试.看起来很有希望:)
# 回答2


Sturlamolden写道:
这是我发现有用的类似的东西:
标准库中将有一个新模块称为
"多处理"(参见奶酪商店中的PyProcessing包).它
允许您扭动多个过程(而不是线程)
SMP的并发(参见可怕的吉尔).
"多处理"模块让我们将CTYPES对象放在共享中
内存段(processing.Array和Processing.Value).有它
自己的malloc,因此对象大小没有4K(一页)下限.
这是我们可以制作numpy ndarray查看共享内存的方式
参考是这些对象:
尝试:
导入处理
除了:
导入多处理 作为处理
导入numpy,ctypes
_ctypes_to_numpy = {
ctypes.c_char:numpy.int8,
ctypes.c_wchar:numpy.int16,
ctypes.c_byte:numpy.int8,
ctypes.c_ubyte:numpy.uint8,
ctypes.c_short:numpy.int16,
ctypes.c_ushort:numpy.uint16,
ctypes.c_int:numpy.int32,
ctypes.c_uint:numpy.int32,
ctypes.c_long:numpy.int32,
ctypes.c_ulong:numpy.int32,
ctypes.c_float:numpy.float32,
ctypes.c_double:numpy.float64
}
def shmem_as_ndarray(array_or_value):
"""查看processing.Array或Processing.Value为ndarray".
obj = array_or_value._obj
buf = obj._wrapper.getView()
尝试:
t = _ctypes_to_numpy [type(obj)]
返回numpy.frombuffer(buf,dtype = t,count = 1)
除了KeyError:
t = _ctypes_to_numpy [obj._type_]
返回numpy.frombuffer(buf,dtype = t)
使用这个简单的工具,我们可以通过多处理创建的过程
使用引用相同共享内存段的ndarrays.我是
对此进行一些可伸缩性测试.看起来很有希望:)
嘿,这很整洁.
感谢您指出我.我不知道这一发展
多处理.
-travis

标签: python

添加新评论