Numpy:计算求和前有条件的二维数组的点积



我有一个问题,我有两个带维度的数组n x dd x h,其中ndh应用于项。

例如,在n=2、d=3和h=3的情况下如果我有以下矩阵:

a = [[1, 2, 3], 
[4, 5, 6]]
b = [[1, 2, 3],
[4, 5, 6],
[1, 1, 1]]

我想找到c这样

c = [[g(1*1)+g(2*4)+g(3*1), g(1*2)+g(2*5)+g(3*1), g(1*3)+g(2*6)+g(3*1)],
[g(4*1)+g(5*4)+g(6*1), g(4*2)+g(5*5)+g(6*1), g(4*3)+g(5*6)+g(6*1)]]

如有任何帮助,将不胜感激

我能够做到这一点,首先用广播进行乘法运算,应用g(),然后在正确的轴上求和:

import numpy as np

def g(x):
return 1 / (1 + np.exp(-x))

a = np.array([[1, 2, 3], 
[4, 5, 6]])

b = np.array([[1, 2, 3],
[4, 5, 6],
[1, 1, 1]])

首先,相乘a[:, None] * b.T(可能是更好的方法(,然后计算g(x),然后在轴2上求和:

>>> g(a[:, None] * b.T).sum(axis=2)
array([[2.68329736, 2.83332581, 2.90514211],
[2.97954116, 2.99719203, 2.99752123]])

验证第一行是否与您想要的结果匹配:

>>> g(1*1) + g(2*4) + g(3*1)
2.683297355321972
>>> g(1*2) + g(2*5) + g(3*1)
2.8333258069316134
>>> g(1*3) + g(2*6) + g(3*1)
2.9051421094702645

最新更新