python的中的numpy入门

2023-10-26 09:38:01 浏览数 (2)

Python中的NumPy入门

在Python中,NumPy是一个强大的数值计算库。它提供了高性能的多维数组对象和各种计算函数,是进行科学计算和数据分析的重要工具。本文将介绍NumPy的基本概念以及如何使用它进行数组操作和数学运算。

1. 安装NumPy

要使用NumPy,首先需要在Python环境中安装它。可以使用pip包管理工具进行安装。打开终端或命令提示符,执行以下命令:

代码语言:javascript复制
plaintextCopy codepip install numpy

2. 导入NumPy

在Python中,使用​​import​​语句导入NumPy库:

代码语言:javascript复制
pythonCopy codeimport numpy as np

一般约定的做法是将NumPy库命名为​​np​​,以便在代码中使用时更加方便。

3. 创建NumPy数组

NumPy的核心对象是​​ndarray​​(N-dimensional array),即多维数组。可以使用​​array()​​函数创建一个ndarray对象。例如,创建一个一维数组:

代码语言:javascript复制
pythonCopy codeimport numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(arr)

输出结果为:

代码语言:javascript复制
plaintextCopy code[1 2 3 4 5]

同样,可以创建二维、三维等多维数组。例如,创建一个二维数组:

代码语言:javascript复制
pythonCopy codeimport numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)

输出结果为:

代码语言:javascript复制
plaintextCopy code[[1 2 3]
 [4 5 6]]

4. 数组属性和操作

4.1 数组属性

ndarray对象有一些常用的属性,可以用来查询数组的特性,如形状、维度数、数据类型等。例如:

代码语言:javascript复制
pythonCopy codeimport numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape)    # 输出数组形状(维度数)
print(arr.ndim)     # 输出数组的维度数
print(arr.dtype)    # 输出数组元素的数据类型

输出结果为:

代码语言:javascript复制
plaintextCopy code(2, 3)
2
int64

4.2 数组操作

NumPy提供了许多函数和方法用于对数组进行操作,例如计算数组的和、平均值、最大值等。这些操作可以在整个数组上执行,也可以在特定的轴上执行。例如:

代码语言:javascript复制
pythonCopy codeimport numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.sum())         # 计算数组所有元素的和
print(arr.mean())        # 计算数组所有元素的平均值
print(arr.max(axis=0))   # 沿着轴0(列)计算数组每列的最大值

输出结果为:

代码语言:javascript复制
plaintextCopy code21
3.5
[4 5 6]

5. 数组索引和切片

NumPy允许使用索引和切片来访问数组元素,与Python的列表类似。例如:

代码语言:javascript复制
pythonCopy codeimport numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(arr[0])         # 索引第一个元素
print(arr[1:4])       # 切片取出第二个到第四个元素

输出结果为:

代码语言:javascript复制
plaintextCopy code1
[2 3 4]

对于多维数组,可以使用逗号分隔的索引和切片来访问特定的元素或子数组。例如:

代码语言:javascript复制
pythonCopy codeimport numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr[0, 1])           # 访问第一行第二列的元素
print(arr[:, 1:3])         # 取出所有行的第二和第三列

输出结果为:

代码语言:javascript复制
plaintextCopy code2
[[2 3]
 [5 6]]

6. 数组形状变换

在NumPy中,可以使用​​reshape()​​函数来改变数组的形状。例如:

代码语言:javascript复制
pythonCopy codeimport numpy as np
arr = np.array([1, 2, 3, 4, 5])
reshaped_arr = arr.reshape((5, 1))      # 将一维数组转换为列向量
print(reshaped_arr)

输出结果为:

代码语言:javascript复制
plaintextCopy code[[1]
 [2]
 [3]
 [4]
 [5]]

7. 示例代码:计算学生成绩平均值

假设有一批学生成绩数据,每个学生有多门科目的成绩。现在我们想要计算每个学生的平均成绩以及每门科目的平均成绩。可以使用NumPy来进行数据计算和操作。 首先,我们创建一个包含学生成绩的二维数组。每一行表示一个学生的成绩,每一列表示一门科目的成绩。示例代码如下:

代码语言:javascript复制
pythonCopy codeimport numpy as np
# 创建学生成绩数组
scores = np.array([[80, 90, 85],
                   [70, 85, 90],
                   [75, 80, 85],
                   [85, 90, 80]])
print("学生成绩数组:")
print(scores)

输出结果为:

代码语言:javascript复制
plaintextCopy code学生成绩数组:
[[80 90 85]
 [70 85 90]
 [75 80 85]
 [85 90 80]]

然后,我们可以使用NumPy的函数和方法进行计算。例如,使用​​mean()​​函数计算每个学生的平均成绩和每门科目的平均成绩。示例代码如下:

代码语言:javascript复制
pythonCopy code# 计算每个学生的平均成绩
student_avg = np.mean(scores, axis=1)
print("n每个学生的平均成绩:")
print(student_avg)
# 计算每门科目的平均成绩
subject_avg = np.mean(scores, axis=0)
print("n每门科目的平均成绩:")
print(subject_avg)

输出结果为:

代码语言:javascript复制
plaintextCopy code每个学生的平均成绩:
[85.         81.66666667 80.        85.        ]
每门科目的平均成绩:
[77.5 86.25 85.  ]

通过以上代码,我们成功计算了每个学生的平均成绩和每门科目的平均成绩,实现了对学生成绩数据的统计分析。这个例子展示了NumPy在实际应用场景中的灵活性和高效性。 希望这个示例代码可以帮助您更好地理解NumPy的使用方法和实际应用。

NumPy的缺点

  1. 大量内存占用:NumPy数组在内存中是连续存储的,这意味着数组的大小必须在创建之前就确定。当处理大规模数据集时,NumPy数组可能会占用相当大的内存空间。
  2. 不支持动态数据的添加和删除:NumPy的数组大小是固定的,一旦创建,就无法动态地添加或删除元素。这使得数据的操作相对局限,有时需要重新创建数组并复制数据。
  3. 不支持高级数据操作和复杂计算:尽管NumPy提供了基本的数组操作和线性代数函数,但在处理更复杂的数据操作和计算时,NumPy的功能相对有限。
  4. 学习曲线较陡峭:使用NumPy需要一定的数学和计算机基础知识,理解和掌握NumPy的用法和函数可能需要一定的学习成本和时间。

类似的库或工具

  1. Pandas:Pandas是基于NumPy构建的数据处理库,提供了更高级的数据结构和功能,如数据表(DataFrame)和数据索引。它可以方便地进行数据清洗、转换、分组、筛选等操作,适用于处理结构化数据。
  2. TensorFlow:TensorFlow是一个强大的开源机器学习框架,用于构建和训练深度学习模型。虽然它也使用到了NumPy数组作为底层数据结构,但它提供了更高级的功能和算法,如神经网络层、优化器等,适用于实现复杂的机器学习任务。
  3. SciPy:SciPy是一个专注于科学计算的Python库,它提供了丰富的高级数学、科学和工程计算功能,例如插值、优化、图像处理等。虽然它也依赖于NumPy,但它提供了更多领域特定的算法和函数。
  4. Dask:Dask是一个用于处理大规模数据的灵活并行计算库,它可以扩展NumPy和Pandas的功能,以便处理超出单个计算机内存限制的数据集。
  5. Spark:Apache Spark是一个用于大规模数据处理和分析的强大开源工具,它提供了分布式计算功能,并支持大规模数据集的处理和分析。Spark中也包含可以与NumPy进行交互的功能。

结论

本文介绍了使用NumPy的基本概念和操作。NumPy提供了强大的数组功能,方便进行科学计算和数据分析。希望本文能够帮助你入门NumPy,并在日后的工作中得到实际应用。 更多关于NumPy的信息和文档,请参考NumPy官方网站:​​https://numpy.org/​​

0 人点赞