取实部或虚部使数组在 numpy 中不连续



我有一个数字数组,我需要它是 F 连续的 C- (对于paraview(:

t=np.linspace(0,10) y=exp(1j*t) 到目前为止,它是连续的,我通过y.flags检查. 但是当我取这个数组的实部或虚部时 - 它变得不连续,例如y.real.flags表明了这一点。另一方面,如果我取abs(y)angle(y)- 它们都是连续的,所以我实际上可以通过cossinangle(y)找到真实和虚构的部分。为什么采用realimag使数组不连续?错误?

>y.realy.imag只是为您提供了每隔8个字节跳过的y数组的视图。注意到OWNDATA: False标志了吗?这就是它的意思:它们只是对其他人数据的视图。这也是它们不连续的原因。这不是错误,而是优化。

absangle必须构建一个全新的阵列。这是连续的,但这也意味着你只是花费了线性的时间和空间,而不是恒定的几十字节和纳秒。

当然,如果要构建一个全新的阵列,您可以随时明确地执行此操作:

>>> 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))快得多。

相关内容

  • 没有找到相关文章