Skip to content

NumPy - Ndarray 对象

NumPy 库的基石是 N 维数组,由 ndarray 类表示。ndarray 本质上是一个通用的容器,旨在高效地存储和操作大量同质数据(相同类型元素)的数据集。可以将其视为一个数值网格,所有数值都具有相同的数据类型,并通过一个非负整数元组进行索引。

ndarray 的主要特性:

  • **同质类型:**所有元素必须是相同的数据类型(例如,全部为 int64 或全部为 float64)。这有助于优化存储和计算。
  • **固定大小:**数组的大小(元素数量)在创建时是固定的。改变大小通常涉及创建一个新数组并复制数据。
  • **高效操作:**数学和逻辑运算可以对整个数组执行(向量化),无需显式的 Python 循环,从而利用高度优化的 C 代码。
  • **多维:**数组可以有多个维度(轴),允许表示向量(一维)、矩阵(二维)、张量(三维以上)。

每个 ndarray 都关联一个 数据类型对象(dtype),描述数组中存储的数据类型(例如,int32、float64、complex128)。数组中的每个元素都占用由 dtype 确定的固定大小的内存块。

当您访问 ndarray 中的单个元素时(例如,my_array[0, 0]),通常会得到一个 NumPy 标量对象(如 numpy.int64 或 numpy.float64)。这些对象与标准的 Python 类型(int、float)不同,但通常行为相似(“鸭子类型”)。

使用 numpy.array() 创建 ndarray 对象

Section titled “使用 numpy.array() 创建 ndarray 对象”

创建 ndarray 的最基本方法是使用 numpy.array() 函数。它将各种输入数据结构(如 Python 列表、元组或其他类似数组的对象)转换为 NumPy 数组。

numpy.array(object, dtype=None, *, copy=True, order='K', subok=False, ndmin=0, like=None)

关键参数:

参数描述
object输入数据,通常是嵌套序列(列表或元组)或其他类似数组的对象。
dtype可选。数组元素所需的数据类型(例如 np.float64、np.int32、np.bool_)。如果为 None,NumPy 会尝试推断最佳类型。
copy可选。如果为 True(默认值),函数总是创建输入对象的一个新副本。如果为 False,只有在必要时才会创建副本(例如,如果输入本身不是正确 dtype 的 ndarray)。
order可选。指定内存布局:‘C’(行主序,C 风格)、‘F’(列主序,Fortran 风格)、‘A’(任意,如果输入是 Fortran 连续的则为 Fortran 风格)、‘K’(保持输入的布局,默认值)。
subok可选。如果为 False(默认值),返回的数组将是基类 ndarray。如果为 True,则子类(如 numpy.matrix)会直接通过。
ndmin可选。指定结果数组应具有的最小维度数。必要时会在形状前添加轴。

让我们看一些创建示例:

import numpy as np
# Create from a list of integers
a = np.array([1, 2, 3, 4])
print(f"Array: {a}")
print(f"Type: {type(a)}")
print(f"Data Type (dtype): {a.dtype}")

输出:

Array: [1 2 3 4]
Type: <class 'numpy.ndarray'>
Data Type (dtype): int64
import numpy as np
# Create from a list of lists
b = np.array([[1.5, 2.0, 3.0],
[4.0, 5.0, 6.0]])
print(f"Array:\n{b}")
print(f"Data Type (dtype): {b.dtype}")
print(f"Shape: {b.shape}") # (rows, columns)
print(f"Dimensions: {b.ndim}")

输出:

Array:
[[1.5 2. 3. ]
[4. 5. 6. ]]
Data Type (dtype): float64
Shape: (2, 3)
Dimensions: 2
import numpy as np
# Ensure the array is at least 2D
c = np.array([1, 2, 3], ndmin=2)
print(f"Array (ndmin=2):\n{c}")
print(f"Shape: {c.shape}")

输出:

Array (ndmin=2):
[[1 2 3]]
Shape: (1, 3)
import numpy as np
# Create an array with complex numbers
d = np.array([1, 2, 3], dtype=np.complex128)
print(f"Array (complex): {d}")
print(f"Data Type (dtype): {d.dtype}")

输出:

Array (complex): [1.+0.j 2.+0.j 3.+0.j]
Data Type (dtype): complex128

在内部,ndarray 管理着一块连续的计算机内存。索引方案将元素索引(如 [1, 2])映射到该内存块中的特定位置。order 参数(‘C’ 或 ‘F’)影响多维数组元素在此线性内存块中的排列方式。

了解更多关于 ndarray 的信息,请参阅官方 ndarray 文档和 numpy.array 函数文档。