我是Python的初学者,最近我了解了NumPy及其著名的 ndarrays 。最初,在阅读了许多赞美他们的文章(一些参考文献here,here,here)之后,我认为:
“好吧,如果NumPy的数组好得多,并且假设我真的不在乎在同一个列表/数组上具有异构数据类型,那为什么还要使用Python的列表?”
但是,经过更深入的研究,我发现使用 ndarrays 也有不利的一面(某些参考文献here和here)。我已经了解了使用每种数据结构的基本优缺点,但是这一切仍然让我感到困惑。因此,我的问题是:作为Python的初学者,什么时候应该使用NumPy的数组,什么时候应该使用Python的列表?在给定情况下,我如何评估最佳选择?
有些人可能会认为这篇文章是重复的-实际上,已经有很多“ ndarrays vs list”主题。但是,我搜索了一段时间,但没有找到满意的答案。有很多人在谈论 ndarrays 和列表的好处,但是还不清楚,特别是对于像我这样的初学者来说,如何选择它们。我应该在日常编码中使用NumPy数组,并为特殊情况保存列表吗?还是我应该相反?谢谢!
注意:,因为它可能与答案有关,所以我打算将Python主要用于机器学习。
答案 0 :(得分:2)
Python列表比较庞大。它们基本上是指针数组,比numpy的ndarrays
占用更多的内存。结果,对于涉及矩阵和复杂计算的数学运算,ndarrays
是更好的选择。因此,大多数数学运算已针对numpy进行了优化,并且ndarrays
的数学功能更为丰富。
Python列表更加灵活。它们可以保存异构的任意数据,并且附加/删除非常有效。如果您想添加和删除许多不同的对象,则可以使用Python列表。
出于机器学习的目的,ndarrays
绝对是您最好的选择。 Tensorflow和keras是两个最受欢迎的机器学习库,它们更适合numpy的内存高效数组,因为它们处理大量的同类数据。