我有一个 memoryview
,其步幅不是很规则,就像下面这样:
>>> mv.strides
(96, 32, 8)
我想将这个memoryview
对象写入一个socket,但我的网络库似乎只支持mv.strides == (1,)
的memoryview
。在Python中是否有一种方法可以使这个memoryview
变平(flatten)?
>>> flatten(mv).strides
(1,)
理想情况下,这不会影响底层字节也不需要复制。我可以使用NumPy来完成这个任务,但如果可能的话,我更喜欢保持通用性。
编辑:以下是一些生成此类memoryview的代码。
In [1]: import numpy as np
In [2]: x = np.ones((2, 3, 4))
In [3]: x.data
Out[3]: <memory at 0x7f371aa849a8>
In [4]: x.data.strides
Out[4]: (96, 32, 8)
memoryview
的源头是什么?那不是基本的 Python 类或概念。我只知道cython
有这个术语。 - hpauljmemoryview
. 但是了解我们所讨论的确切的memoryview
是有好处的。 - MSeifert