y.real
并且y.imag
只是让您查看y
每隔 8 个字节跳过的数组。注意到那OWNDATA: False
面旗帜了吗?这就是它的意思:它们只是对他人数据的看法。这也是它们不连续的原因。不是bug,是优化。
abs
并且angle
必须建立一个全新的阵列。这是连续的,但这也意味着您只花费了线性时间和空间,而不是恒定的几十个字节和纳秒。
当然,如果想要构建一个全新的数组,您可以随时明确地执行此操作:
>>> y.real.copy().flags
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
或者:
>>> np.ascontiguousarray(y.real).flags
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
UPDATEIFCOPY : False
copy
当然总是复制;我相信ascontiguousarray
只有在数组不是连续的情况下才会复制。文档中似乎并不能保证这一点,但我很确定它只是调用require
. (无论如何,任何一个都会比 . 快很多cos(angle(y))
。)