繁体   English   中英

如何通过此转换的numpy数组加快迭代速度?

[英]How can I speed up iteration through this transformed numpy array?

以下是要使用pyglet渲染的2D等距图块地图的局部类定义。

class Map(object):

    origin = 0
    drytile = tile.dry
    wettile = tile.wet

    def __init__(self, left=8, right=8):
        self.grid = np.array(([None] * left, [None] * right), dtype=object)
        self._setup_grid()

    def __iter__(self):
        """return tiles in the order in which they should be rendered"""
        # get number of diagonals
        ndiags = (np.max(self.grid.shape) * 2) -\
                 (1 + (np.max(self.grid.shape) - np.min(self.grid.shape)))

        # get iterator to go through diagonals in back-to-front order
        offsets = xrange(-(ndiags / 2), ndiags / 2 + 1)

        # iterate in render order
        for off in offsets:
            for tile in np.flipud(self.grid).diagonal(off)[::-1]:
                yield tile

如下图所示,这些图块需要从头到尾渲染:

平铺渲染顺序。原点在上角

在我的类定义中,原点是指最上面的图块(图块a ),因此,该类中定义的left维度是沿[abdg]的向量,而right维度是沿[acfj]的向量。

这是我的应用程序中至关重要的部分,因为我打算渲染大量的图块。 有没有一种更快的方法可以按指定顺序遍历图块? 可以消除嵌套循环的帮助吗?

非常感谢!

我将首先订购数据结构。 如果订购向量,则迭代将更快。

通常,使用有序数据结构对这种情况有好处。

如果出于任何原因要操纵结构,则需要执行“有序插入”或删除,这比较慢。 使用有序数据结构的权衡是在插入和移除上,并且由于电路板的变化不大,因此看起来只有使用有序数据结构才可以。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM