NumPy ndarrays 与 Python 的列表

NumPy's ndarrays vs Python's lists

我是 Python 的初学者,我最近了解了 NumPy 及其著名的 ndarrays。起初,看了很多人称赞他们(有些引用here, here, here),我想:

"Well, if NumPy's arrays are so much better, and assuming I don't really care about having heterogeneous data types on the same list/array, why should I ever use Python's list?"

然而,经过更深入的研究,我发现使用 ndarrays 也有消极的一面(一些参考 and )。我已经了解了使用这些数据结构中的每一个的基本优缺点,但这一切对我来说仍然很混乱。所以,我的问题是:作为 Python 的初学者,我什么时候应该使用 NumPy 的数组,什么时候应该使用 Python 的列表?在给定的情况下,我如何评估哪个选项是最好的?

有些人可能倾向于认为此 post 是重复的 - 而且确实已经有很多 "ndarrays vs lists" 主题。但是,我已经搜索了一段时间,但没有为我的问题找到令人满意的答案。很多人都在说ndarrays和列表的好处,但是还是不太清楚,特别是像我这样的初学者,如何选择。我应该在日常编码中使用 NumPy 数组并为特殊情况保存列表吗?或者我应该做相反的事情吗?谢谢!

注意: 因为它可能与答案相关,所以我打算将 Python 主要用于机器学习。

Python 列表比较庞大。它们基本上是指针数组,占用的内存比 numpy 的 ndarrays 多得多。因此,对于涉及矩阵和复杂计算的数学运算,ndarrays 是更好的选择。因此,大多数数学运算都针对 numpy 进行了优化,并且 ndarrays.

有更多数学上有用的函数 不过,

Python 列表要灵活得多。它们可以容纳异构的、任意的数据,并且 appending/removing 非常高效。如果您想添加和删除许多不同的对象,Python 列表是最佳选择。

为了机器学习的目的,ndarrays 绝对是您最好的选择。 Tensorflow 和 keras 这两个最流行的机器学习库更适合 numpy 的 memory-efficient 数组,因为它们处理大量同质数据。