我有一个列主数组的缓冲区(我通过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()
答案 0 :(得分:0)
确实没有简单的方法可以改变memoryview
的步幅/形状而不跳入C语言。最简单的方法是使用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)