什么是numpy?

简介

NumPy(Numerical Python)是一个用于科学计算的Python库,它提供了一种高效地处理大型多维数组和矩阵的方式。NumPy具有广泛的数学函数库,可以进行线性代数、傅里叶变换以及随机数生成等操作。该库还提供了对数组的快速运算能力,使得数据分析和科学计算更加简单和高效。

安装

使用pip安装NumPy非常简单:

pip install numpy

语法

数组的创建和属性

在NumPy中,最基本的数据结构是ndarray(N-dimensional array,多维数组),它是NumPy提供的主要对象类型。可以使用以下方法创建和初始化数组:

使用numpy.array()函数从现有的Python列表或元组中创建数组。

使用numpy.arange()函数创建一个有规律的数组。

使用numpy.zeros()函数创建全零数组。

使用numpy.ones()函数创建全一数组。

使用numpy.empty()函数创建未初始化的数组。下面是一些创建数组的实例:

import numpy as np

# 从列表创建数组
arr1 = np.array([1, 2, 3])
print(arr1)    # 输出: [1 2 3]

# 使用arange创建数组
arr2 = np.arange(0, 10, 2)
print(arr2)    # 输出: [0 2 4 6 8]

# 创建全零数组
arr3 = np.zeros((2, 3))
print(arr3)
# 输出:
# [[0. 0. 0.]
#  [0. 0. 0.]]

# 创建全一数组
arr4 = np.ones((3, 3), dtype=int)
print(arr4)
# 输出:
# [[1 1 1]
#  [1 1 1]
#  [1 1 1]]

# 创建未初始化的数组
arr5 = np.empty((2, 2))
print(arr5)
# 输出:
# [[6.e-322 4.e-323]
#  [7.e-323 0.e+000]]

数组的索引和切片

NumPy提供了强大的索引和切片功能,使得对数组中的元素进行选择和操作变得非常方便。

使用整数索引单个元素:可以使用[i, j]的方式获取多维数组中的元素。

使用切片获取多个元素:可以使用[start:end]的方式获取数组中的一段连续元素。

使用布尔索引进行条件筛选:可以通过逻辑运算创建一个布尔数组,并使用该数组作为索引来筛选数组中满足条件的元素。

使用花式索引获取指定位置的元素:可以传入一个整数或整数列表来选择数组中特定位置的元素。以下是一些示例:

import numpy as np

# 创建一个3x3的二维数组
arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]])

# 使用整数索引获取单个元素
print(arr[0, 2])    # 输出: 3

# 使用切片获取多个元素
print(arr[:2, 1:])    # 输出: [[2 3]
#                           [5 6]]

# 使用布尔索引进行条件筛选
bool_arr = arr > 5
print(bool_arr)
# 输出:
# [[False False False]
#  [False False  True]
#  [ True  True  True]]
print(arr[bool_arr])
# 输出: [6 7 8 9]

# 使用花式索引获取指定位置的元素
print(arr[[0, 2], [1, 2]])    # 输出: [2 9]

数组的运算和函数

NumPy提供了丰富的数学函数和运算符,可以对数组进行各种数值计算。下面介绍一些常用的运算和函数:

数组的基本运算:可以对数组进行加、减、乘、除等基本运算,以及取余、幂运算等。

数组的统计函数:可以计算数组的最大值、最小值、平均值、中位数、标准差等统计指标。

数组的元素级操作:可以对数组中的每个元素进行操作,如取反、取绝对值、四舍五入等。

数组的形状操作:可以改变数组的形状,如转置、展平、重塑等操作。

数组的逻辑运算:可以对数组进行逻辑运算,如与、或、非等。

数组的排序:可以对数组进行排序,包括升序和降序排序。

以下是一些示例:

import numpy as np

# 数组的基本运算
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print(arr1 + arr2)    # 输出: [5 7 9]
print(arr1 * arr2)    # 输出: [ 4 10 18]

# 数组的统计函数
arr3 = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])
print(np.max(arr3))    # 输出: 9
print(np.mean(arr3))   # 输出: 5.0

# 数组的元素级操作
arr4 = np.array([-1, -2, 3.5])
print(np.abs(arr4))    # 输出: [1.  2.  3.5]
print(np.round(arr4))  # 输出: [-1. -2.  4.]

# 数组的形状操作
arr5 = np.array([[1, 2, 3],
                 [4, 5, 6]])
print(np.transpose(arr5))    # 输出: [[1 4]
                             #       [2 5]
                             #       [3 6]]
print(arr5.flatten())        # 输出: [1 2 3 4 5 6]
print(np.reshape(arr5, (3, 2)))    # 输出: [[1 2]
                                   #       [3 4]
                                   #       [5 6]]

# 数组的逻辑运算
arr6 = np.array([True, False, True])
arr7 = np.array([False, True, False])
print(np.logical_and(arr6, arr7))    # 输出: [False False False]

# 数组的排序
arr8 = np.array([3, 1, 5, 2, 4])
print(np.sort(arr8))    # 输出: [1 2 3 4 5]

数据分析中的地位

NumPy在数据分析领域具有重要的地位。它提供了高效的数组操作和数学函数,使得处理大量数据变得更加高效。以下是NumPy在数据分析中的一些应用场景:

数据存储:NumPy可以有效地存储和处理大型多维数组,适用于存储和操作各种类型的数据,包括数字、字符串、布尔值等。

数据清洗和处理:通过NumPy的强大的索引和切片功能,可以对数据进行筛选、切片、随机抽样等操作,使得数据清洗和预处理更加灵活。

数学计算和统计分析:NumPy提供了丰富的数学函数和运算符,可以进行各种数值计算和统计分析,包括求平均值、标准差、相关系数、协方差等。

数组运算和广播:NumPy支持对数组进行基本运算,如加、减、乘、除等,以及逻辑运算和位运算。此外,NumPy还提供了广播(broadcasting)功能,可以对形状不同的数组进行运算,使得数据处理更加灵活和高效。

快速向量化操作:NumPy的底层实现是用C语言编写的,所以它在执行向量化操作时非常高效。通过使用NumPy,可以避免使用循环来处理单个元素,而是将操作应用于整个数组,从而提高计算速度。

与其他库的兼容性:NumPy与其他常用的数据分析库(如Pandas、Matplotlib等)紧密结合,可以无缝地与这些库进行交互,使得数据分析工作流更加流畅和高效。

假设我们有一份学生考试成绩的数据,包含了三个班级的数学成绩、英语成绩和历史成绩。我们可以使用NumPy来进行数据处理和统计分析。

import numpy as np

# 创建一个二维数组,表示每个班级的成绩
scores = np.array([[80, 90, 85],
                   [75, 95, 92],
                   [82, 88, 79]])

# 计算每个班级的平均成绩
class_averages = np.mean(scores, axis=1)
print(class_averages)    # 输出: [85.         87.33333333 83.        ]

# 计算每门科目的平均分和标准差
subject_averages = np.mean(scores, axis=0)
subject_std = np.std(scores, axis=0)
print(subject_averages)    # 输出: [79.         91.         85.33333333]
print(subject_std)         # 输出: [ 2.94392029  3.51188458  5.50757055]

# 判断是否有学生不及格(成绩低于60分)
pass_status = np.all(scores >= 60, axis=1)
print(pass_status)    # 输出: [ True  True False]

# 统计每个班级及格人数
pass_count = np.sum(pass_status)
print(pass_count)    # 输出: 2

在上述实例中,我们首先创建了一个二维数组scores,表示每个班级的成绩。然后通过NumPy的函数进行统计分析,计算了每个班级的平均成绩、每门科目的平均分和标准差,并判断了是否有不及格的学生。最后,通过使用NumPy的函数统计了每个班级及格的人数。

通过这个简单的实例,可以看出NumPy在数据分析中的重要性和灵活性。它可以帮助我们高效地进行数据处理、统计分析和运算,为数据科学家和分析师提供了强大的工具。

想要体验在线编程的请大家登录:https://zglg.work

你可能感兴趣的:(numpy)