python - 如何有效地从 10,000 个 Python 列表中挑选第 i 个项目并将它们高效地转换为列表?
问题描述
我正在研究蒙特卡洛算法。从本质上讲,由于涉及时间,每次迭代都会生成一个包含 50 项涵盖 50 年模拟的列表。我附加这些,以便我有一个包含 10,000 个元素的列表,每个元素都是 50 个数字的列表。
现在,当然,我需要将每年的数据放入包含 10,000 个项目的列表中,以便进行年度直方图分析。
举个简单的例子,如果我有 5 次运行 3 年的数据,我可能会有一个如下所示的列表:
[[1,2,3, 4,5], [1.1, 2.2, 3.3, 4.4, 5.5], [2.5, 2.6, 2.7, 2.8, 2.9]]
我需要把它放到一个看起来像这样的列表中:
[[1, 1.1, 2.1], [2, 2.2, 2.6], [3, 3.3, 2.7], [4, 4.4, 2.8], [5, 5.5, 2.9]]
显然,我可以通过双循环来强制执行此操作,但是对于 500,000 个数据点,我正在寻找更高效和 Pythonic 的东西。
是否有人对可以快速有效地实现这一点的内部(或包)有足够的了解?
解决方案
您可以使用zip
或numpy.transpose
(可能更快):
d = [[1,2,3, 4,5], [1.1, 2.2, 3.3, 4.4, 5.5], [2.5, 2.6, 2.7, 2.8, 2.9]]
zip(*d) # returns a generator in Python3, use list on top of it if needed
import numpy as np
np.transpose(d) # returns a np.array, which will behave more or less the same as a Python list
# or simply something like
arr = np.array(d)
arr[:,i] # returns the i-th values in each row
推荐阅读
- elasticsearch - 缺少字段的 Elasticsearch 脚本排序
- php - 使用 WHERE value IS NOT NULL 之类的东西从 INNER JOIN 中删除 NULL 值
- html - 如何在我的网页上添加一个打印 pdf 文档的按钮?
- flutter - 在列表视图中使用 CachedVideoPlayer
- javascript - 使用 async 而不是多个 await (Javascript)
- python - 在 filedialog 或 tkinter 小部件之后如何将焦点重新回到 cmd 或终端
- shell - 如何在unix目录中找到文件组合?
- android - 回收站视图仅显示一项而不是三项
- ms-access - 条件累积
- c# - 我写了一个计算器。一切正常,但是当我想使用点“。” 对于小数,它会跳出来。我不明白出了什么问题