给定2个numpy(1D)数组,我想计算包含这两个数组的所有元素之和的2D数组。例如,像这样:
import numpy as np
v = np.array([1, 2, 3])
w = np.array([4, 5, 6])
sum_matrix = np.zeros((3,3))
for i in range(3):
for j in range(3):
sum_matrix[i,j] = v[i] + w[j]
print(sum_matrix)
这将返回正确的答案
[[5. 6. 7.]
[6. 7. 8.]
[7. 8. 9.]]
但是我想避免python循环(当然也应该是双循环)。这种情况下有一些不错的numpy功能吗?
我可以想到一种避免所有循环的解决方案,但感觉有点像黑客。我注意到,如果v
是列矩阵而w
是行矩阵,则矩阵乘积v @ w
返回所有可能乘积的矩阵。我可以使用log
和exp
将其转换为总和:
v = v[np.newaxis].T # Turn v into a column matrix
w = w[np.newaxis] # Turn w into a row matrix
print(np.log(np.exp(v) @ np.exp(w)))
与上面的打印相同。
问题:对于此问题,还有其他一些解决方案吗?
答案 0 :(得分:1)
您可以使用np.add.outer
,它将对v
和w
中的每个值应用np.add
:
np.add.outer(v,w)
array([[5, 6, 7],
[6, 7, 8],
[7, 8, 9]])