首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用NumPy实现数组中的和元素

用NumPy实现数组中的和元素
EN

Stack Overflow用户
提问于 2015-05-06 17:25:04
回答 1查看 483关注 0票数 0

我正在用matplotlib用下面的代码注释一个图

代码语言:javascript
复制
for position, force in np.nditer([positions, forces]):
    plt.annotate(
        "%.3g N" % force,
        xy=(position, 3),
        xycoords='data',
        xytext=(position, 2.5),
        textcoords='data',
        horizontalalignment='center',
        arrowprops=dict(arrowstyle="->")
    )

效果很好。但是,如果我在同一位置上有元素,它将在彼此上叠加多个箭头,也就是说,如果我有positions = [1,1,4,4]forces = [4,5,8,9],它将在位置1处形成两个箭头,在位置4上形成两个箭头,在彼此之上。相反,我想把力相加,只在位置1处用力4+5=9创建一个箭头,在位置4处用力8+9=17创建一个箭头。

我如何用Python和NumPy来完成这个任务呢?

编辑

我想这可能就像

代码语言:javascript
复制
import numpy as np

positions = np.array([1,1,4,4])
forces = np.array([4,5,8,9])

new_positions = np.unique(positions)
new_forces = np.zeros(new_positions.shape)

for position, force in np.nditer([positions, forces]):
    pass
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-06 18:02:23

我不确定numpy是否会提供帮助。这里有一个Python解决方案:

代码语言:javascript
复制
from collections import defaultdict
result = defaultdict(int)
for p,f in zip(positions,forces):
    result[p] += f

positions, forces = zip(*result.items())
print positions, forces

编辑:--我不知道“我要用numpy做这件事”是什么意思,但是

代码语言:javascript
复制
import numpy as np
positions = np.array([1,1,4,4])
forces = np.array([4,5,8,9])
up = np.unique(positions)
uf = np.fromiter((forces[positions == val].sum() for val in up), dtype=int)

print up, uf
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30083605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档