高效的数据类型 Python(列表还是numpy数组?)
我现在还是不太确定是用列表好还是用numpy数组好。
我一开始用的是numpy数组,但因为我需要频繁添加元素,结果导致很多vstack,这让我的代码变得很慢。
如果用列表的话,这个问题就能解决,但我还需要删除元素,而在numpy数组上删除元素又比较方便。
现在看来,我可能得自己写一个数据类型(用编译语言,然后封装一下)。我只是好奇,是否有办法用Python的类型来完成这个工作。
总结一下,我的数据类型需要满足以下条件:
- 有2维,行数n(可变),每行有k(固定)个元素
- 在内存中是一块连续的(这样操作起来会更高效)
- 能以平均常数时间添加行,就像C++的向量那样,但每次都是k个元素
- 能删除一组元素(最好是就地删除,保持末尾有空闲空间以便后续添加)
- 能根据行和列的索引访问元素(O(1),像data[row*k + column]那样)
我觉得有这样一个数据类型是很有用的,而且在C/Fortran中实现起来也不是不可能。
用Python的话,我能做到最接近的是什么呢?(或者,你觉得写一个Python类来实现这个数据类型可行吗?这样的话性能会怎么样呢?)
1 个回答
1
我觉得,如果你在用C语言或Fortran编程,你得知道数组的大小,这样才能分配合适的内存(不考虑realloc
这个函数!)。所以假设你知道这个大小,为什么还需要往数组里添加元素呢?
无论如何,numpy数组有一个resize
方法,你可以用它来扩展数组的大小。