numpy - 计算向量的总和
问题描述
我有两个矩阵a
,b
并且想将它们之间的所有总和计算为张量。我怎样才能比执行以下代码更有效地做到这一点:
a = np.array([[1,2],[3,4],[5,6]])
b = np.array([[4,5],[6,7]])
n1 = a.shape[0]
n2 = b.shape[0]
f = a.shape[1]
c = np.zeros((n1,n2,f))
c = np.zeros((n1,n2,f))
for i in range(n1):
for j in range(n2):
c[i,j,:] = a[i,:] + b[j,:]
einstein-sum 之类的显然不起作用,外积也没有——有合适的方法吗?
解决方案
您可以将循环表达式转换为广播表达式:
c[i,j,:] = a[i,:] + b[j,:]
c[i,j,:] = a[i,None,:] + b[None,j,:] # fill in the missing dimensions
c = a[:,None,:] + b[None,:,:]
In [167]: a[:,None,:]+b[None,:,:]
Out[167]:
array([[[ 5, 7],
[ 7, 9]],
[[ 7, 9],
[ 9, 11]],
[[ 9, 11],
[11, 13]]])
In [168]: _.shape
Out[168]: (3, 2, 2)
a[:,None]+b
做同样的事情,因为前导None
( np.newaxis
) 是自动的,并且尾随:
也是。
推荐阅读
- python - 以公式为值的 Python Pandas eval
- python - 无法将 keras 模型转换为 tensorflow:类型对象“密集”没有属性“from_config”
- javascript - 使用可变比例时使用 React 和 D3 分离关注点
- php - SagePay 返回成功但失败 INVALID_SIGNATURE PPro
- c - c语言循环后矩阵乘法错误
- javascript - 使用自定义实时更新css中的默认样式
- arrays - Powershell中带有数组的多个ForEach
- vba - 用户选择(工作簿和工作表名称)然后复制和粘贴
- javascript - 计算子组件的出现次数
- javascript - 在单词边界处截断文本