numpy中的ndarry:在ndarray迭代中很昂贵

2024-05-23 14:05:05 发布

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

下面是一个有趣的观察:

1 import numpy as np
2 data = np.array([[255,255,255], [0, 0, 255], [255, 0, 0]], np.int8)
3 for i in range(1000000):
4    for row in data:
5        for col in row:
6            flag = col > 0

上述代码需要~17秒才能完成。如果我通过

data = data.tolist()

然后整个过程只需<;1秒即可完成。你知道吗

想知道: 1阵列价值比较效率低的原因是什么? 2如果不将ndarray转换为list,有什么更合适的方法进行比较?会不会比我把它写进单子更有效?

谢谢!你知道吗

------------编辑问题:------------

正如@hpaulj所指出的,非常昂贵的是迭代而不是价值比较。但我确实需要遍历数组。有没有比把它转换成列表更好的方法?你知道吗


Tags: 方法inimportnumpyfordataasnp
2条回答

一个更合适和有效的方法是使用numpy元素比较。你知道吗

for i in range(1000000):
    flag = data > 0

从侧栏:Why is a `for` over a Python list faster than over a Numpy array?

如何使数组上的迭代更快的问题经常出现——最好的答案是“不要”,或者更确切地说,将迭代推到编译的numpy代码上。在Python级别,没有办法使显式迭代显著加快。有些技巧可能会产生2倍的加速,但不是一个数量级。你知道吗

所以在你的例子中,答案是it depends on what you are doing at each iteration。正如gzc's答案所示,您可以使用一个numpy表达式逐个元素执行比较。执行该操作不需要迭代。你知道吗

相关问题 更多 >