热线电话:13121318867

登录
2018-11-08 阅读量: 1891
python中切片和拷贝的速度问题

想用 matplotlib 画一个动态图,但是数据是实现读取好的。所以只能不断改变画图数据的大小来实现 plot 的动态过程。 想到两种方法,一个是新建一个 array,然后每一次迭代都 append 一个数据进去,然后 plot 这个 array,另一种方法 是每次对原始数据进行切片,后画图。

后来采用的是切片的方法,发现速度竟然比 append 要快很多,总觉得每一步一次的 append 应该不会比对那么多数据进行浅复制的切片慢啊。

因为数据是存储在 numpy 的 ndarray 中和 Python 内置的 list 可能有些不一样。list 在切片的时候实际上是进行浅拷贝的,而 ndarray 在切片时是返回一个 view(numpy 名词),共享核心数据,但其他的属性例如 shape 等都是不影响的。可能 ndarray 的核心数据都是 flatten 之后存储的吧。

总之,append 很慢,如果知道数组长度就预先分配好空间,如果不知道也尽量少做 append 或者 resize 的操作,用空间换时间是更优解吧。

0.0000
5
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子