2

例如,我在 python 中有一个函数,它基本上采用数组 (75,150) 的符号。我来自Matlab,时间执行看起来或多或少相同,而不是这个函数。我想知道 sign() 是否工作得非常缓慢,并且您知道另一种方法可以做到这一点。

谢谢,

4

1 回答 1

1

我不能告诉你这比 Matlab 快还是慢,因为我不知道你在那里看到了什么数字(你根本没有提供定量数据)。但是,就替代方案而言:

import numpy as np
a = np.random.randn(75, 150)
aSign = np.sign(a)

使用%timeitin 进行测试IPython

In [15]: %timeit np.sign(a)
10000 loops, best of 3: 180 µs per loop

因为数组上的循环(以及其中发生的事情)是在优化的 C 代码而不是通用 Python 代码中实现的,所以它往往快一个数量级——在与 Matlab 相同的范围内。


将完全相同的代码与 numpy 矢量化操作与 Python 循环进行比较:

In [276]: %timeit [np.sign(x) for x in a]
1000 loops, best of 3: 276 us per loop

In [277]: %timeit np.sign(a)
10000 loops, best of 3: 63.1 us per loop

所以,这里只有 4 倍的速度。(但是a这里很小。)

于 2013-08-19T19:24:38.873 回答