迭代numpy数组时的性能问题

2024-04-24 12:00:11 发布

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

我有一个三维数组的图像,如

[
    [
        [225, 0, 0],
        [225, 225, 0],
        ...
    ],
    [
        [225, 0, 0],
        [225, 225, 0],
        ...
    ],
    ...
]

此阵列的大小为500x500x3,其中750.000个元素。 这些是在数组上迭代的简单嵌套循环

for row in arr:
    for col in row:
        for elem in col:
            elem = (2 * elem / MAX_COLOR_VAL) - 1

但是迭代需要花费大量时间(>;5分钟)。你知道吗

我是numpy的新手,所以可能我迭代数组的方式不对?如何优化这些循环?你知道吗


Tags: in图像元素for时间colval数组
1条回答
网友
1楼 · 发布于 2024-04-24 12:00:11

Numpy数组不是设计用来对元素进行迭代的。它甚至可能比在Python列表上迭代要慢,因为这将导致大量元素的包装和展开。你知道吗

Numpy阵列被设计成在批量中进行处理。例如,计算两个1000×1000矩阵的元素和。你知道吗

如果要将所有元素与2相乘,则将这些元素除以MAX_COLOR_VAL,然后从中减去一个元素,您只需构造一个新数组:

arr = (2 * arr.astype(float) / MAX_COLOR_VAL) - 1

这将对所有元素应用此操作。你知道吗

Note: note that if you iterate over a numpy array, you do not iterate over the indices, you iterate over the rows itself. So the row in for row in arr will return a 2d array, not the index of a 2d array.

相关问题 更多 >