作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定一个二维 numpy
数组 A
和一个一维数组 c
,我想计算二维数组 B
与条目B[i, j] = scipy.special.logsumexp(np.append(c, A[i, j]))
.
我可以用矢量化的方式而不是使用双 for 循环来做到这一点吗?
最佳答案
要模仿 logsumexp
的行为,您只需在获取 exp 之前减去其参数的
,然后在最后重新添加。因此你可以这样做:max
(检查 source code),求和,记录
>>> import numpy as np
>>> from scipy import special
>>>
>>> A = np.random.uniform(900, 1100, (4, 4))
>>> c = np.random.uniform(950, 1050, (7,))
>>>
>>> cm = np.max(c)
>>> mask = A > cm
>>> B = np.empty_like(A)
>>> B[mask] = A[mask] + np.log(np.exp(np.subtract.outer(cm, A[mask])).sum(axis=-1) + 1)
>>> B[~mask] = cm + np.log(np.exp(c - cm).sum() + np.exp(A[~mask] - cm))
>>>
# compute via logsumexp for reference
>>> cA = np.empty((8, 4, 4))
>>> cA[:-1] = c[:, None, None]
>>> cA[-1] = A
>>> special.logsumexp(cA, axis=0)
array([[ 1048.88855012, 1048.88854955, 1069.83524808, 1048.88854955],
[ 1048.88854955, 1048.88854955, 1048.88877212, 1048.93142975],
[ 1048.88854955, 1067.59166572, 1048.88854955, 1069.78737913],
[ 1048.88854955, 1048.88854955, 1098.61910373, 1072.76058998]])
>>> B
array([[ 1048.88855012, 1048.88854955, 1069.83524809, 1048.88854955],
[ 1048.88854955, 1048.88854955, 1048.88877212, 1048.93142975],
[ 1048.88854955, 1067.59166572, 1048.88854955, 1069.78737914],
[ 1048.88854955, 1048.88854955, 1098.61910374, 1072.76058999]])
关于python - scipy 中的向量化逐项 logsumexp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48395696/
考虑以下示例: .links { margin: 0; padding: 0; border: 1px solid gray; } .links ul
我是一名优秀的程序员,十分优秀!