【发布时间】:2015-06-17 02:14:15
【问题描述】:
这是一个 Python 初学者问题,最终与内存管理有关。
我正在将一个 uint32 numpy 数组切成两部分,然后尝试创建其中一个子数组的 uint8 视图。请注意,通过创建视图,我的意思是在 uint8 中重新解释内存中的基础数据,而不是在 uint8 中转换变量:因此大小会在过程中发生变化。
这是初始数组和视图示例,工作正常:
a=np.array([(1,2,3,4),(5,6,7,8),(9,10,11,12)],np.int32)
a.view(np.int8) # everything is fine
这会崩溃(c 不是硬拷贝,仍然与原始数组绑定):
a=np.array([(1,2,3,4),(5,6,7,8),(9,10,11,12)],np.int32)
c, a= np.split (a,[1],1);
c.view(np.int8) #oups
在创建视图之前放弃原始数组也无济于事:
a=np.array([(1,2,3,4),(5,6,7,8),(9,10,11,12)],np.int32)
c, b= np.split (a,[1],1);
del a
c.view(np.int8) #oups
这是我想出的最好的:
a=np.array([(1,2,3,4),(5,6,7,8),(9,10,11,12)],np.int32)
c, a= np.split (a,[1],1);
c=np.copy(c).view(np.uint8) #ok, but really ?!?
有没有更好的方法将一个数组拆分为 2 个子数组,以便 numpy 将它们视为“本地”而不复制它们? (当然原来的数组会被丢弃)
【问题讨论】: