是否有纯 Python 方法来转置 a memoryview?
Python memoryviews可以表示的不仅仅是一维字节块。它们可以表示多维布局、非连续内存、复杂元素类型等。例如,在下面的代码中:
In [1]: import numpy
In [2]: x = numpy.array([[1, 2], [3, 4]])
In [3]: y = x.T
In [4]: a = memoryview(x)
In [5]: b = memoryview(y)
a并且b是 2×2 多维内存视图:
In [6]: a.shape
Out[6]: (2, 2)
In [7]: b.shape
Out[7]: (2, 2)
andb表示 的转置a,soa[i, j]和b[j, i]alias 相同的内存(即原始x数组的单元格 i、j):
In [8]: a[0, 1] = 5
In [9]: b[1, 0]
Out[9]: 5
In [10]: x
Out[10]:
array([[1, 5],
[3, 4]])
NumPy 数组支持简单的转置,但 NumPy 数组并不是多维内存视图的唯一来源。例如,您可以投射一维内存视图:
In [11]: bytearr = bytearray([1, 2, 3, 4])
In [12]: mem = memoryview(bytearr).cast('b', (2, 2))
In [13]: mem.shape
Out[13]: (2, 2)
In [14]: mem[1, 0] = 5
In [15]: bytearr
Out[15]: bytearray(b'\x01\x02\x05\x04')
memoryview 格式非常灵活,可以表示 的转置mem,就像我们b之前a示例中的转置一样,但在 memoryview API 中似乎没有简单的转置方法。是否有转置任意多维内存视图的纯 Python 方法?
扬帆大鱼
蝴蝶刀刀
相关分类