【问题标题】:Performance: Multidimensional Lists vs Flat List性能:多维列表与平面列表
【发布时间】:2014-12-18 20:20:59
【问题描述】:

我在 python 中使用非常大的列表列表来做一些数学运算,但后来它开始滞后了很多(约 20 秒)。然后我开始比较多维列表和平面列表。

代码

from timeit import timeit
from sys import getsizeof
print("Literals:")
print("Flat list: {} seconds".format(timeit("[1, 2, 3, 1, 2, 3, 1, 2, 3]")))
print("Mult list: {} seconds".format(
    timeit("[[1, 2, 3], [1, 2, 3], [1, 2, 3]]")))
a = list(range(100))
b = [list(range(i * 10, i * 10 + 10)) for i in range(10)]
print("\nSizes:")
print("Flat list: {} bytes".format(getsizeof(a)))
print("Mult list: {} bytes".format(getsizeof(b)))
print("\nAppending:")
print("Flat list: {} seconds".format(
    timeit("a.extend((1, 2, 3))", "a = [1, 2, 3, 1, 2, 3]")))
print("Mult list: {} seconds".format(
    timeit("b.append([1, 2, 3])", "b = [[1, 2, 3], [1, 2, 3]]")))

输出

Literals:
Flat list: 0.17474557721948392 seconds
Mult list: 0.39777811142990527 seconds

Sizes:
Flat list: 508 bytes
Mult list: 100 bytes

Appending:
Flat list: 0.11419465630051207 seconds
Mult list: 0.17854960247173668 seconds

这告诉我多维列表需要更长的时间来更改,但需要更少的内存,但我不能肯定,因为许多时间需要不同的方法,可能需要更多或更少的时间。哪种列表类型更有效,在什么情况下?

【问题讨论】:

  • 您不使用numpy 有什么原因吗?如果您在大型列表上进行数学运算,那么在 numpy 数组上使用向量操作和在 Python 列表上使用迭代之间的性能差异将使您想到的其他任何事情都相形见绌。
  • 我实际上对 python 编程相当陌生,并且从未听说过它。谢谢你的建议!我看了看,似乎很完美。

标签: python arrays performance multidimensional-array


【解决方案1】:

getsizeof 只返回最外层列表的内存大小。此外,与列表计算相比,创建列表所需的时间可以忽略不计。对于具有大量数字的数字性能,请使用 numpy。

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 2015-03-25
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多