考虑以下代码:
import numpy as np
a = np.zeros(50)
a[10:20:2] = 1
b = c = a[10:40:4]
print b.flags # You'll see that b and c are not C_CONTIGUOUS or F_CONTIGUOUS
我的问题:
有没有办法(仅参考b
)使两者都b
连续c
?如果在此操作后np.may_share_memory(b,a)
返回完全可以。False
接近但不太成功的事情是: np.ascontiguousarray
/np.asfortranarray
因为它们将返回一个新数组。
我的用例是我有非常大的 3D 字段存储在numpy.ndarray
. 为了节省内存,我想将这些字段分解为我真正感兴趣的域部分:
a = a[ix1:ix2,iy1:iy2,iz1:iz2]
对子类的切片比对ndarray
对象的切片更受限制,但这应该可以工作并且它会“做正确的事情”——附加在子类上的各种自定义元数据将按预期进行转换/保存。不幸的是,由于这返回 a view
, numpy 之后不会释放大数组,所以我实际上并没有在这里保存任何内存。
为了完全清楚,我希望完成两件事:
- 保留我的类实例上的元数据。切片会起作用,但我不确定其他形式的复制。
- 使原始数组可以自由地被垃圾收集