我有两个numpy数组,希望找出每个元素对之间的差异并将其储存到矩阵中。
以下是我的代码:
for i in range(arr1):
for j in range(arr2):
data[i,j] = float(arr1[i])-float(arr2[j])
如何优化此循环的速度?
正如评论中所指出的,有几种方法可以达到您的目标。
In [1]: import numpy as np
In [6]: a = np.random.rand(1000)
In [7]: b = np.random.rand(1000)
In [9]: %timeit a - b.reshape((-1,1))
100 loops, best of 3: 2.46 ms per loop
In [10]: %timeit np.subtract.outer(a, b)
100 loops, best of 3: 2.52 ms per loop
In [18]: a - b.reshape((-1,1)) == np.subtract.outer(a, b).T
array([[ True, True, True, ..., True, True, True],
[ True, True, True, ..., True, True, True],
[ True, True, True, ..., True, True, True],
...,
[ True, True, True, ..., True, True, True],
[ True, True, True, ..., True, True, True],
[ True, True, True, ..., True, True, True]], dtype=bool)
编辑 @PaulPanzer 提出的第二种方法似乎是最慢的。
In [27]: %timeit np.subtract(*np.ix_(a, b)); a[:, None] - b[None, :]
100 loops, best of 3: 4.99 ms per loop
np.subtract.outer(arr1, arr2) helped me solved the problem.
谢谢大家
np.subtract.outer(arr1, arr2)
或广播或np.subtract(*np.ix_(arr1, arr2))
来进行编程;广播:arr1[:, None] - arr2[None, :]
- Paul Panzerarr1 - arr2.reshape((-1,1))
- Julien