何时在 Python 中使用哪些数组实现? [复制]

Posted

技术标签:

【中文标题】何时在 Python 中使用哪些数组实现? [复制]【英文标题】:When to use which array implementations in Python? [duplicate] 【发布时间】:2020-01-18 16:38:49 【问题描述】:

我应该什么时候使用np.array([1,2,3]) vs np.array([[1,2,3]]) vs [1,2,3] vs [[1,2,3]]?我知道使用 np.array 允许您对数组执行列表实现没有的某些操作,并且使用 [[]] 而不是 [] 允许您进行转置,但使用转置的一般原因是什么超过其他人?

【问题讨论】:

一个是一维的,一个是二维的?如果您发现自己在没有清楚了解差异的情况下问这个问题,那么您需要坚持 1D。这意味着您很有可能真的不需要 2D 操作 @roganjosh,昨天 OP 提出了寻求一维数组的外积的问题 - 但试图使用矩阵积。 您可能只是问“使用 numpy 数组的原因是什么” - 这应该可以帮助您入门:numpy.org/devdocs/user/quickstart.html [1,2,3][[1,2,3]] 不是数组,它们是列表 最佳答案取决于您要如何处理这些对象。在清楚之前,我认为您需要学习很多关于如何将一种形式转换为另一种形式的知识。 np.array 从列表中创建一个数组。 .tolist() 则相反。 reshape 是改变数组维度的一种方法。也学习各自的方法。列表有一组有限但非常有用的方法。数组永远不会替换列表(和/或元组)。 【参考方案1】:

这是 numpy 与列表以及 1d 与 2d 维度的问题:

np.array([1,2,3]) 是 3 个元素的一维 ndarray:type(np.array([1,2,3])) 返回 <class 'numpy.ndarray'>np.array([1,2,3]).shape 返回 (3,) np.array([[1,2,3]]) 是具有 1 行和 3 列的二维 ndarray:type 返回 <class 'numpy.ndarray'>shape 返回 (1,3) [1,2,3] 是具有 3 个元素的一维列表:type([1,2,3]) 返回 <class 'list'>len([1,2,3]) 返回 3 [[1,2,3]] 是一个 1 行 3 列的二维列表:type 返回 <class 'list'>len 返回 1len([[1,2,3]][0]) 返回 3。注意[[1,2,3]][0] = [1,2,3],所以这个二维列表的第一个元素是一个一维列表。

您一定注意到列表没有shape 属性。列表是基本的 Python 对象,虽然它们有很多用途,但有时您需要使用 ndarray,尤其是您需要使用特定的 numpy 函数。但是不要将所有列表都更改为ndarray,因为某些操作使用列表更方便。总之,必要时使用ndarray,否则使用list

至于尺寸,这取决于您需要什么,但如果您不需要二维的东西,请继续使用一维。

【讨论】:

列表对象没有维度。 我认为,鉴于这个问题,这里的庸俗化比词汇的准确性更重要

以上是关于何时在 Python 中使用哪些数组实现? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

关于 python 何时自动创建数组副本的文档

Python 列表与数组 - 何时使用?

线性表之何时使用ArrayListLinkedList?

何时在 Python 中选择 collections.Iterable 或 '__iter__' 属性? [复制]

如何以及何时放弃在 C# 中使用数组?

如何确定 DST 何时在 Python 中的特定位置开始或结束? [复制]