下面是一个有趣的观察:
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所指出的,非常昂贵的是迭代而不是价值比较。但我确实需要遍历数组。有没有比把它转换成列表更好的方法?你知道吗
一个更合适和有效的方法是使用numpy元素比较。你知道吗
从侧栏: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
表达式逐个元素执行比较。执行该操作不需要迭代。你知道吗相关问题 更多 >
编程相关推荐