gpt4 book ai didi

python-3.x - 为什么 Cython 中的这个循环和它的 Python 等效循环一样慢?

转载 作者:太空宇宙 更新时间:2023-11-03 14:51:39 27 4
gpt4 key购买 nike

以下代码重新排列 RGBA4 纹理数据数组中的位。

cpdef bytes toDDSrgba4(bytearray data):
cdef bytes new_data = b''
cdef u32 i, pixel, new_pixel
cdef u32 red, green, blue, alpha

for i in range(0, len(data), 2):
pixel = int.from_bytes(data[i:i+2], "big")

red = (pixel >> 12) & 0xF
green = (pixel >> 8) & 0xF
blue = (pixel >> 4) & 0xF
alpha = pixel & 0xF

new_pixel = (red << 8) | (green << 4) | blue | (alpha << 12)
new_data += (new_pixel).to_bytes(2, "big")

return new_data

然而,即使使用正确的变量类型,它也和它的 Python 等价物一样慢。
这是什么原因?

最佳答案

您正在使用 += 附加到 bytes 对象。这真的很慢,因为它每次都必须复制整个现有的 bytes 对象。

不要那样做。一个更好的选择是使用 bytearray,并且只在最后从 bytearray 构建一个 bytes 对象。

关于python-3.x - 为什么 Cython 中的这个循环和它的 Python 等效循环一样慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45312596/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com