我有一个 ndarray 子类,它实现了将一个或多个记录加载/保存到平面二进制文件中。加载记录后,我可以以正常的 NumPy 方式访问它们。
我的问题是当我切片结果(或者实际上,任何 NumPy 数组)时会发生什么。这通常会产生一个“ View ”,即。引用与父数组相同的缓冲区的数组。
一旦我有了这个 View ,有没有办法确定 View 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.
最佳答案
信息是通过 array.__array_interface__
公开的(也许还有更好的地方),但是我认为您应该首先使用内存映射而不是乱搞这个。例如,检查 np.may_share_memory
函数(或实际上是 np.byte_bounds
)的 numpy 代码。
关于python - 在 numpy 数组中查找切片的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12421770/