memoryview和columnmajor/FORTRAN bu

2024-06-06 11:40:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列主数组的缓冲区(我通过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()

Tags: ofto方法数组becffiarray缓冲区
1条回答
网友
1楼 · 发布于 2024-06-06 11:40:52

要改变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)

相关问题 更多 >