ndarray
数组对象 (Array objects)
ndarray引入的原因
Python已有列表类型,为什么需要一个数组对象(类型)?
- 数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据
- 设置专门的数组对象,经过优化,可以提升这类应用的运算速度
- 数组对象采用相同的数据类型,有助于节省运算和存储空间
NumPy提供了N维数组类型ndarray,它描述了同一类型的元素(items)的集合(collection)。
NumPy中定义的最重要的对象是称为ndarray的N维数组类型。 它描述了相同类型的元素的集合(collection)。 可以使用从零开始的索引来访问集合中的元素。
所有ndarray都是同质的(homogenous):每个item占用相同大小的内存块,并且所有块的解释方式都完全相同。 数组中各元素的解释方式由一个数据类型对象(称为dtype)指定。 除了基本类型(整数,浮点数等)之外,数据类型对象还可以表示数据结构。
ndarray的内部构成:
ndarray是一个多维数组对象,包括:
• 实际的数据
• 描述这些数据的元数据(数据维度、数据类型等)
下图显示了ndarray、数据类型对象(dtype)和数组标量(array scalar)类型之间的关系:
上面的概念图显示了用于描述数组中数据的三个基本对象之间的关系:
- ndarray本身
- 描述数组中一个固定大小元素的布局的数据类型对象(dtype)
- 访问数组的一个元素时返回的数组标量(array scalar)Python对象。
从数组中提取的一个元素(例如通过索引)由一个Python对象表示。该对象的类型是NumPy中内置的数组标量(array scalar)类型之一。
数组标量 (array scalar)
NumPy通常以数组标量(具有关联的dtype的标量)的形式返回数组的元素。数组标量与Python标量不同,但是在大多数情况下它们可以互换使用。
使用数组标量的主要优点是它们保留了数组类型(Python可能没有可用的匹配的标量类型,例如int16)。因此,使用数组标量可以确保数组和标量之间的行为相同,而与值是否在数组内部无关。
ndarray对象的存储:
ndarray对象由计算机内存中连续一维segment组成,并与将每个元素映射到内存块中某个位置的索引方案结合在一起。
内存块按行优先顺序(C style)或列优先顺序(FORTRAN或MatLab style)保存元素。
(The memory block holds the elements in a row-major order (C style) or a column-major order (FORTRAN or MatLab style).)