python - 使用列表列表来平均 numpy 数组中的行
问题描述
我想使用(python)列表中的条目信息来平均 numpy 数组的行。例如,考虑以下情况:
LoL = [[], [0, 1, 2, 4], [3, 5], [], [6]] #List of lists
arr = np.array([[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5], [6, 6, 6, 6]]) #Numpy array
print arr
[[0 0 0 0]
[1 1 1 1]
[2 2 2 2]
[3 3 3 3]
[4 4 4 4]
[5 5 5 5]
[6 6 6 6]]
对于上面的列表 ( LoL
) 和 numpy 数组 ( arr
) 列表,我希望行[0, 1, 2, 4]
得到arr
平均,行[3, 5]
之间arr
得到平均,行[6]
保持其原始形式。转换后的数组 ( arr_new
) 应如下所示:
arr_new = np.array([[1.75, 1.75, 1.75, 1.75], [4.0, 4.0, 4.0, 4.0] , [6.0, 6.0, 6.0, 6.0]])
print arr_new
[[1.75 1.75 1.75 1.75]
[4. 4. 4. 4. ]
[6. 6. 6. 6. ]]
最优雅的方法是什么?
解决方案
由于您list
的 of 中list
的形状不一致,没有一种优雅的方式来执行单个操作,但是循环是一种选择并且仍然应该是有效的,因为它仅随 的大小缩放LoL
:
np.stack([np.mean(arr[el], 0) for el in LoL if el])
array([[1.75, 1.75, 1.75, 1.75],
[4. , 4. , 4. , 4. ],
[6. , 6. , 6. , 6. ]])
推荐阅读
- android - 如何从 Service Android Q 启动 Activity
- django - 如何按数字顺序查询值?
- c# - 如果它是 C# 中其他进程的用户,则无法关闭数据库连接
- php - 如何使用 Eloquent 编写此查询
- javascript - 如何在特定域和 url 的 chrome 扩展中使用代理
- python - 如何解决python错误NotADirectoryError:[Errno 20]不是目录:
- angular - 未捕获的错误:找不到模块“tslib”| 将 Angular 项目版本 10 更新到 11
- c# - 以编程方式打开 Windows 10 Battery Flyout
- javascript - 如何将包含多个表格、输入框等的 HTML 转换为 Angular 中的 ExcelSheet?
- node.js - 我在哪里可以看到本地主机上的控制台日志以及何时部署该功能?