阵列对非均匀元的计算方法

2024-10-01 17:36:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有三个相同大小的数组:

arr1 = np.array([1.4, 3.0, 4.0, 4.0, 7.0, 9.0, 9.0, 9.0])
arr2 = np.array([2.3, 5.0, 2.3, 2.3, 4.0, 6.0, 5.0, 6.0])
data = np.array([5.4, 7.1, 9.5, 1.9, 8.7, 1.8, 6.1, 7.4])

arr1可以占用任何浮点值,arr2只能占用几个浮点值。我想得到arr1和arr2的唯一对,例如

^{pr2}$

对于每个非唯一对,我需要平均data-数组中的相应元素,例如,平均值为9.5和1.9,因为对(arr1[3], arr2[3])和{}相等。与指数6和8相对应的数据中的值也是如此。因此,数据数组变成

dataunique = np.array([5.4, 7.1, 5.7, 8.7, 4.6, 6.1])

Tags: 数据元素datanp数组指数array平均值
3条回答

defaultdict可以帮助您:

>>> import numpy as np
>>> arr1 = np.array([1.4, 3.0, 4.0, 4.0, 7.0, 9.0, 9.0, 9.0])
>>> arr2 = np.array([2.3, 5.0, 2.3, 2.3, 4.0, 6.0, 5.0, 6.0])
>>> data = np.array([5.4, 7.1, 9.5, 1.9, 8.7, 1.8, 6.1, 7.4])
>>> from collections import defaultdict
>>> dd = defaultdict(list)
>>> for x1, x2, d in zip(arr1, arr2, data):
...   dd[x1, x2].append(d)
... 
>>> arr1unique = np.array([x[0] for x in dd.iterkeys()])
>>> arr2unique = np.array([x[1] for x in dd.iterkeys()])
>>> dataunique = np.array([np.mean(x) for x in dd.itervalues()])
>>> print arr1unique
[ 1.4  7.   4.   9.   9.   3. ]
>>> print arr2unique
[ 2.3  4.   2.3  5.   6.   5. ]
>>> print dataunique
[ 5.4  8.7  5.7  6.1  4.6  7.1]

这个方法给出了答案,但破坏了顺序。如果排序很重要,则可以使用collections.OrderedDict执行基本相同的操作

这是一个“纯粹的”解决问题的办法。引用纯numpy,因为它依赖于一个numpy增强建议,我仍在研究,但是您可以在这里找到完整的代码:

http://pastebin.com/c5WLWPbp

group_by((arr1, arr2)).mean(data)

喂,问题解决了。比任何发布的解决方案都快得多;如果我可以自己说的话,也要优雅得多;)。在

从arr1作为键创建一个字典,并将其等效arr2存储为价值保存每个数据字典的唯一性进入。如果键已存在跳过该迭代并继续。在

相关问题 更多 >

    热门问题