Gra*_*ool 2 python arrays numpy
给定以下数组:
X = np.array([[1, 27, 3], [4, -1, 6]])
W = np.array([2, 4, 3])
Run Code Online (Sandbox Code Playgroud)
这两个方程是等价的:
sum_a = 0
for l in range(len(X)):
sum_a += np.sum(W * X[l]) # 141
sum_b = np.sum(np.sum(W * X)) # 141
Run Code Online (Sandbox Code Playgroud)
但这两个不是:
sum_a = 0
for l in range(len(X)):
sum_a += np.exp(np.sum(W * X[l])) # 4.797813327299302e+51
sum_b = np.sum(np.exp(np.sum(W * X))) # 1.7199742630376623e+61
Run Code Online (Sandbox Code Playgroud)
为什么会这样?对于第二种情况,如何使 sum_b 等于 sum_a ?我特别想使用 numpy 使总和相等,这样我就可以向量化更大的方程。
这些不是相同的操作。您希望e**119 + e**22== e**141,但这不是求幂的工作原理。您可以使其相同,但它是乘法运算,而不是加法运算:
sum_a = 1
for l in range(len(X)):
sum_a *= np.exp(np.sum(W * X[l]))
sum_b = np.sum(np.exp(np.sum(W * X)))
Run Code Online (Sandbox Code Playgroud)
顺便说一句,np.sum最后一行的外部是无用的。内部np.sum返回单个值。
跟进
啊,所以你想要求和版本。您可以通过仅在一个轴上求和来做到这一点:
sum_b = np.sum(np.exp(np.sum(W * X, axis=1)))
Run Code Online (Sandbox Code Playgroud)
在这种特殊情况下,这是愚蠢的,因为它比后者没有贡献e**119大得多。e**22
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |