numpy数组映射并取平均值
我有三个数组
import numpy as np
value = np.array ([1, 3, 3, 5, 5, 7, 3])
index = np.array ([1, 1, 3, 3, 6, 6, 6])
data = np.array ([1, 2, 3, 4, 5, 6])
数组“index”和“value”的大小是一样的,我想把“value”中的项目按平均值分组。举个例子:在“value”中前两个项目[1, 3,...]在“index”中都有相同的键1,所以在最终的数组中,这两个值的平均数就是: (1 + 3) / 2,结果是2。
最终的数组是:
[2, nan, 4, nan, nan, 5]
第一个值是“value”中第1个和第2个的平均值
第二个值是nan,因为“index”中没有对应的键(数组中没有“2”)
第三个值是“value”中第3个和第4个的平均值
...
谢谢你的帮助!!!
祝好, Roy
4 个回答
我在网上查找如何用numpy的直方图功能来处理一个很大的数组:
首先,我定义了几个数组:
value = np.array ([1, 3, 3, 5, 5, 7, 3], dtype='float')
index = np.array ([1, 1, 3, 3, 6, 6, 6], dtype='float')
data = np.array ([1, 2, 3, 4, 5, 6])
接着,我用np.histogram函数来计算一些东西:
sums = np.histogram(index ,
bins=np.arange(index.min(), index.max()+2),
weights=value)[0]
counter = np.histogram(index ,
bins=np.arange(index.min(), index.max()+2))[0]
最后,我把sums除以counter,得到了结果:
array([ 2., NaN, 4., NaN, NaN, 5.])
也许你想用一下 numpy.bincount()
呢?
value = np.array([1, 3, 3, 5, 5, 7, 3])
index = np.array([1, 1, 3, 3, 6, 6, 6])
np.bincount(index, value) / np.bincount(index)
# array([ NaN, 2., NaN, 4., NaN, NaN, 5.])
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们刚开始学习编程的时候。比如,有人可能会在使用某个特定的功能时,发现它并没有按照预期工作,这时候就需要去寻找解决方案。
在这种情况下,很多人会选择在网上查找答案,像StackOverflow这样的网站就是一个很好的资源。在这些网站上,程序员们会分享他们遇到的问题和解决办法,帮助其他人快速找到答案。
所以,如果你在编程的过程中遇到困难,不妨去这些论坛上看看,可能会找到你需要的帮助。
>>> [value[index==i].mean() for i in data]
[2.0, nan, 4.0, nan, nan, 5.0]