gpt4 book ai didi

python - "growing"(追加到)一个序列对象

转载 作者:太空狗 更新时间:2023-10-30 00:27:00 24 4
gpt4 key购买 nike

在 Matlab 中,建议不要使用这种类型的算法(“增长数组”)

mine = []
for i=1:100,
mine = [mine,randn(1)]
end

虽然很多 Python 示例都显示了这种算法(尽管这是一个非常糟糕的示例):

import numpy.random as rand

mine = []
for i in range(100):
mine.append(rand.random(1)[0])

我想知道这是为什么——有什么区别?

最佳答案

区别在于:

  • 在 MATLAB 中,循环的每次迭代都会重新分配矩阵以将大小增加一并将整个内容复制到新分配的空间中。
  • Python 列表不是这样工作的。分配的空间比任何给定点所需的空间都多,并且分配的空间以保证在摊销的恒定时间内完成追加的方式增长。

也就是说,我认为差异主要在于文化:

  • 在 MATLAB 中使用大型数字矩阵是很常见的,并且一次增加一个元素(或一行/一列)确实会很昂贵。
  • 另一方面,没有人会使用 Python 列表(或列表的列表)来表示大型矩阵:这会非常慢并且会非常低地使用内存。 Numerical Pythonndarray 将被使用,并且 ndarray 将提供与 MATLAB 矩阵完全相同的权衡。

关于python - "growing"(追加到)一个序列对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7757573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com