一些NumPy函数例如np.subtract
,np.add
,np.multiply
,np.divide
,np.logical_and
,np.bitwise_and
等,有一个“outer”方法可以用来创建相当于“乘法表”的等效形式:
In [76]: np.subtract.outer(a, b)
Out[76]:
array([[ -9, -19, -29, -39, -49],
[ -8, -18, -28, -38, -48],
[ -7, -17, -27, -37, -47],
[ -6, -16, -26, -36, -46],
[ -5, -15, -25, -35, -45]])
或者,使用广播:
In [96]: a[:, None] - b
Out[96]:
array([[ -9, -19, -29, -39, -49],
[ -8, -18, -28, -38, -48],
[ -7, -17, -27, -37, -47],
[ -6, -16, -26, -36, -46],
[ -5, -15, -25, -35, -45]])
它们的性能大致相同:
In [98]: a = np.tile(a, 1000)
In [99]: b = np.tile(b, 1000)
In [100]: %timeit a[:, None] - b
10 loops, best of 3: 88.3 ms per loop
In [101]: %timeit np.subtract.outer(a, b)
10 loops, best of 3: 87.8 ms per loop
In [102]: %timeit np.transpose([a]) - np.tile(b, (len(a), 1))
10 loops, best of 3: 120 ms per loop
a[:, None]
和np.transpose([a])
是一样的.. 所以这和我的代码是一样的,只不过我不需要显式地使用.tile
。 - Claudiuoptfunc3
的函数,比optfunc2
稍微快一点。它用1个调用替换了5个对np.transpose
的调用。 - unutbu