python - 计算 Nympy 2D 数组的 mean(),按单独列表中的值分组,字符串对应于 2D 数组中的每一行
问题描述
我正在参加关于 Python 数据分析的课程(Numpy、Pandas 等)。
我们有一个任务,我们应该计算一个数组的 mean() - 基于另一个列表的值。这可能看起来有点不清楚,所以这里有一个例子:
list = ['A','A','A','A','B','B','B','B']
array = [ [5.1, 3.5, 1.4, 0.2],
[4.9, 3. , 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2],
[5. , 3.6, 1.4, 0.2],
[5.4, 3.9, 1.7, 0.4],
[4.6, 3.4, 1.4, 0.3],
[5. , 3.4, 1.5, 0.2] ]
列表值对应于数组中行的类别,我们被要求计算按 A 和 B 分组的每一列的平均值。我想这可以通过将数据转换为 Pandas 数据框来完成 - 但分配属于Numpy,所以我想我们应该以某种方式在没有 Pandas 的情况下解决它。
我一直在努力和谷歌搜索无济于事。任何帮助深表感谢。
谢谢
BR安德斯
解决方案
我能想到的最快方法是拆分行并计算平均值。但是,如果您想将解决方案推广到不同的形式,这种方法是一种快速的作弊方法并且不足list
:
>>> [x.mean() for x in np.split(np.array(array), 2)]
[2.40625, 2.58750]
一个更合适的解决方案是准备一个类别字典。然后按顺序将行附加到映射中的正确条目。我已重命名list
为keys
.
>>> res = {k: [] for k in set(keys)}
{'A': [], 'B': []}
>>> for k, row in zip(keys, array):
... res[k] += row
>>> res
{'A': [5.1, 3.5, 1.4, 0.2, 4.9, 3.0, 1.4, 0.2, 4.7, 3.2, 1.3, 0.2, 4.6, 3.1, 1.5, 0.2],
'B': [5.0, 3.6, 1.4, 0.2, 5.4, 3.9, 1.7, 0.4, 4.6, 3.4, 1.4, 0.3, 5.0, 3.4, 1.5, 0.2]}
然后计算均值:
>>> [(k, sum(v)/len(v)) for k, v in res.items()]
[('B', 2.5875), ('A', 2.40625)]
这适用于任意数量的类别和任何形式的类别序列keys
。只要len(keys)
等于行数。
我相信你可以自己想出一个完整的 NumPy 替代方案。
推荐阅读
- python - 在扩展名之前为完整路径的名称添加后缀
- python - 统计模型 - 微不足道的特征转换
- c++ - Gnome-builder 运行按钮不运行。它安装
- python - 具有一维数据的 Keras CNN
- php - PHP从具有3个连接的2个表中输出数据
- c++ - 如何为向量重载 << 运算符
在 C++ 中 - mysql - MYSQL:将平面文件 csv 导入 MySQL 数据库
- scala - 将 Shapeless HList 折叠到同一个 HList 的 Future 中,如果有的话,将找到的 Future 元素展平
- javascript - 如何从javascript中的日期字符串中提取时间?
- javascript - 如何从 javascript 中的 php 数组中获取实际值?