当前位置: 代码迷 >> python >> memoryview和列主/ FORTRAN缓冲区
  详细解决方案

memoryview和列主/ FORTRAN缓冲区

热度:67   发布时间:2023-07-14 09:53:10.0

我有一个用于列主数组的缓冲区(通过cffi以字节为单位)。

有没有一种方法可以使用Python的缓冲区协议的正确属性为其获取memoryview? 该方法cast让我分配一个新的形状,但似乎并没有让一个指定视图是否行或列主。

例如:

# Let b be my buffer of bytes for a column major array of integers
shape = (5, 2, 3)
mv = memoryview(b).cast('i', shape=shape)
# Expectedly not what I want as this is then assumed to be a
# C-style row-major array
mv.to_list()

确实,没有任何简单的方法可以不改变C memoryview而改变memoryview的步幅/形状。最简单的方法是使用NumPy(我在这里创建缓冲区,您应该跳过该行):

shape = (5, 2, 3)
b = bytearray('a' * np.dtype('i').itemsize * np.prod(shape))
a = np.frombuffer(b, dtype='i').reshape(shape)
a.strides = a.strides[::-1]
m = memoryview(a)
print(m.strides)