有效地计算和矩阵

时间:2019-03-22 13:53:32

标签: python numpy

给定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返回所有可能乘积的矩阵。我可以使用logexp将其转换为总和:

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)))

与上面的打印相同。

问题:对于此问题,还有其他一些解决方案吗?

1 个答案:

答案 0 :(得分:1)

您可以使用np.add.outer,它将对vw中的每个值应用np.add

np.add.outer(v,w)

array([[5, 6, 7],
       [6, 7, 8],
       [7, 8, 9]])