numpy库学习(持续更新

array多维数组概念

定义

多维数组是一种包含多个维度的数据集合,每个维度可以看作是一个方向,类似于数学中的坐标轴。一维数组可以想象成一条直线上的点的集合,二维数组类似一个平面上的网格,三维数组则像是一个立体空间中的立方体网格,以此类推,可以有更高维度的数组。

特点

  • 同质性:多维数组中的所有元素必须是相同的数据类型,例如 intfloat 等。这使得 NumPy 数组在内存中存储更高效,也方便进行统一的数值计算。
  • 固定大小:数组创建后,其形状(即各维度的大小)通常是固定的,不像 Python 列表可以动态改变大小。

创建方式

使用 np.array() 函数

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np

# 创建一维数组
one_d_array = np.array([1, 2, 3, 4, 5])
print("一维数组:", one_d_array)

# 创建二维数组
two_d_array = np.array([[1, 2, 3], [4, 5, 6]])
print("二维数组:\n", two_d_array)

# 创建三维数组
three_d_array = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print("三维数组:\n", three_d_array)

使用其他函数创建特殊数组

1
2
3
4
5
6
7
8
9
10
11
# 创建全零二维数组,形状为 (2, 3)
zeros_array = np.zeros((2, 3))
print("全零二维数组:\n", zeros_array)

# 创建全一三维数组,形状为 (2, 2, 2)
ones_array = np.ones((2, 2, 2))
print("全一三维数组:\n", ones_array)

# 创建指定范围内的一维数组
arange_array = np.arange(0, 10, 2) # 从 0 到 10(不包含 10),步长为 2
print("一维数组:", arange_array)

维度与形状

  • 维度(ndim):表示数组的维数,即数组有多少个方向。例如,一维数组的维度是 1,二维数组的维度是 2,以此类推。可以使用数组的 ndim 属性获取维度信息。
1
2
3
4
5
6
7
import numpy as np

one_d = np.array([1, 2, 3])
two_d = np.array([[1, 2], [3, 4]])

print("一维数组的维度:", one_d.ndim) # 输出: 1
print("二维数组的维度:", two_d.ndim) # 输出: 2
  • 详细概念(有关维度):

  • 示例 1:创建一维数组,指定ndmin=1(默认情况,可不写)

    1
    2
    3
    4
    5
    6
    import numpy as np

    data = [1, 2, 3]
    arr1 = np.array(data, ndmin=1)
    print(arr1)
    print(arr1.ndim) # 输出数组的维度

    在这个例子中,data本身是一个列表,是一维的数据结构。使用np.array()创建数组时,即使不指定ndmin=1,默认也是创建一维数组。输出结果如下:

    1
    2
    [1 2 3]
    1

    示例 2:创建二维数组,指定ndmin=2

    1
    2
    3
    4
    5
    6
    import numpy as np

    data = [1, 2, 3]
    arr2 = np.array(data, ndmin=2)
    print(arr2)
    print(arr2.ndim)

    这里data还是一维的列表,但通过设置ndmin=2,NumPy 会在前面添加一个维度,将其转换为二维数组。输出结果为:

    1
    2
    [[1 2 3]]
    2

    可以看到,原本的一维列表被包装成了一个只有一行的二维数组。

    示例 3:创建三维数组,指定ndmin=3

    1
    2
    3
    4
    5
    6
    import numpy as np

    data = [1, 2, 3]
    arr3 = np.array(data, ndmin=3)
    print(arr3)
    print(arr3.ndim)

    此时data依旧是一维列表,由于ndmin=3,NumPy 会添加两个维度,生成一个三维数组。输出如下:

    1
    2
    [[[1 2 3]]]
    3

    它变成了一个只有一个 “切片” 的三维数组。

    示例 4:已有高维数据,指定ndmin小于其维度

    1
    2
    3
    4
    5
    6
    import numpy as np

    data = [[1, 2], [3, 4]] # 二维列表
    arr4 = np.array(data, ndmin=1)
    print(arr4)
    print(arr4.ndim)

    这里data是二维列表,虽然指定ndmin=1,但因为原始数据已经是二维,所以arr4还是二维数组,ndmin不会改变高于它指定值的维度。输出为:

    1
    2
    3
    [[1 2]
    [3 4]]
    2

    通过这些例子可以看出,ndmin参数在需要确保生成的 NumPy 数组具有特定最小维度时非常有用,常用于数据预处理等场景

  • 形状(shape):表示数组在每个维度上的大小,是一个元组。例如,二维数组 [[1, 2, 3], [4, 5, 6]] 的形状是 (2, 3),表示有 2 行 3 列。可以使用数组的 shape 属性获取形状信息。
1
2
3
4
import numpy as np

two_d = np.array([[1, 2, 3], [4, 5, 6]])
print("二维数组的形状:", two_d.shape) # 输出: (2, 3)

索引与切片

多维数组的索引和切片操作与一维数组类似,但需要考虑多个维度

1
2
3
4
5
6
7
8
9
10
import numpy as np

two_d = np.array([[1, 2, 3], [4, 5, 6]])

# 访问单个元素
print("访问第 1 行第 2 列的元素:", two_d[0, 1]) # 输出: 2

# 切片操作
print("获取第一行的所有元素:", two_d[0, :]) # 输出: [1 2 3]
print("获取第一列的所有元素:", two_d[:, 0]) # 输出: [1 4]

应用场景

多维数组在数据分析、机器学习、图像处理等领域有广泛应用。例如,在图像处理中,一张彩色图像可以用三维数组表示,其中前两个维度表示图像的高度和宽度,第三个维度表示颜色通道(如红、绿、蓝)。