在numpy数组中查找切片的位置

时间:2012-09-14 09:33:12

标签: python numpy slice

我有一个ndarray子类,它实现将一个或多个记录加载/保存到平面二进制文件中。加载记录后,我可以以正常的NumPy方式访问它们。

我的问题是关于切片结果(或者实际上是任何NumPy数组)时会发生什么。这通常产生'视图'即。一个数组,它引用与父数组相同的缓冲区。

有了这个视图,有没有办法确定视图V在数组A中的位置?更确切地说,我想知道V开始时的字节偏移(从A的数据缓冲区的起点开始)。这样我就可以将切片写回到正确偏移的磁盘上。

以下是一些显示情况的示例代码

# Imagine a as consisting of 4 4-byte records...
a = np.arange(16, dtype='B').reshape(4,4)

# I select the first record
v = a[0]

print (v)

# [0 1 2 3]

# I can determine that v is a subarray:

is_subarray = v.base != None

# I can determine which dimension the slice spans..

whichdim = v.base.strides.index (v.strides[-1])

# But not its position along that dimension.

1 个答案:

答案 0 :(得分:4)

信息通过array.__array_interface__公开(也许在某个地方更好),但是我认为你应该只使用memmaps开头而不是搞乱这个。检查例如np.may_share_memory函数(或实际np.byte_bounds)的numpy代码。