作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 numpy 数组 arr
和一个切片起点列表 start
以及一个切片端点列表 end
。对于每一行 i
,我想确定从 start[i]
到 end[i]
的元素之和。也就是说,我想确定
[np.sum(arr[i, start[i]:end[i]]) for i in range(arr.shape[0])]
有没有更智能/更快的方法来仅使用 numpy 来做到这一点?
最佳答案
这是使用 NumPy broadcasting
的矢量化方法和 np.einsum
-
# Create range array corresponding to the length of the no. of cols
r = np.arange(arr.shape[1])
# Mask of ranges corresponding to the start and end indices using broadcasting
mask = (start[:,None] <= r) & (end[:,None] > r)
# Finally, we use the mask to select and sum rows using einsum
out = np.einsum('ij,ij->i',arr,mask)
关于python - Numpy:计算所有行 i 的 sum(array[i, a[i]:b[i]]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39757355/
我是一名优秀的程序员,十分优秀!