给定 2 个 numpy (1D) 数组,我想计算包含这两个数组元素的所有可能总和的二维数组。例如,像这样:
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
and将其转换为总和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)))
这与上面的打印相同。
问题:对于这个问题,还有其他更简单、更笨拙的解决方案吗?
您可以使用np.add.outer
,这将在应用np.add
上的每个值v
和w
:
np.add.outer(v,w)
array([[5, 6, 7],
[6, 7, 8],
[7, 8, 9]])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句