在libtiff保存文件的上下文中遇到了这种情况,但现在我感到困惑了。有人能告诉我为什么这两者不对等吗?
ar1 = zeros((1000,1000),dtype=uint16)
ar1 = ar1.view(dtype=uint8) # works
ar2 = zeros((1000,2000),dtype=uint16)
ar2 = ar2[:,1000:]
ar2 = ar2.view(dtype=uint8) # ValueError: new type not compatible with array.编辑:那么这也有效吗?
ar2 = zeros((1000,2000),dtype=uint16)
ar2 = array(ar2[:,1000:])
ar2 = ar2.view(dtype=uint8)发布于 2013-10-22 15:18:19
这不是一个完整的答案,但可能会为我遗漏的细节指明方向。当您制作数组的一个片段时,您不再拥有连续的数据,并且您也不拥有这些数据。要查看这一点,请查看数组的标志:
ar2 = zeros((1000,2000),dtype=uint16)
ar2.flags
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
ar2 = ar2[:,1000:]
ar2.flags
C_CONTIGUOUS : False
F_CONTIGUOUS : False
OWNDATA : False
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False我不知道是哪一个引起了实际的问题。正如您在编辑中所注意到的,如果您创建了切片数组的新副本,那么一切都很好。您可以使用您注意到的array()或类似于ar2=ar2[:,1000:].copy()之类的东西来完成这一任务。
https://stackoverflow.com/questions/19521493
复制相似问题