【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧1

简介: 【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧

Python NumPy学习指南

第一部分:NumPy简介与安装

1. 什么是NumPy?

NumPy,即Numerical Python,是Python中最为常用的科学计算库之一。它提供了强大的多维数组对象ndarray,并支持大量的数学函数和操作。与Python内置的列表相比,NumPy数组的计算速度更快,占用内存更少,非常适合处理大量的数据。

NumPy的功能不仅限于数值计算,它还支持复杂的数组操作,如切片、索引、线性代数运算等。NumPy通常与SciPy、Pandas等其他科学计算库一起使用,构成了Python科学计算的基础生态。

2. 安装NumPy

在开始使用NumPy之前,我们需要在Python环境中安装它。可以通过以下两种方式进行安装:

使用pip安装:

打开命令行终端,输入以下命令:

pip install numpy
使用Anaconda安装:

如果你使用的是Anaconda环境,可以使用以下命令:

conda install numpy

安装完成后,可以通过以下命令验证是否安装成功:

import numpy as np
print(np.__version__)

成功安装后,终端将输出NumPy的版本号。

第二部分:NumPy数组基础

1. NumPy数组的创建

NumPy数组是NumPy的核心数据结构。你可以通过多种方式来创建NumPy数组:

从列表创建一维数组:
import numpy as np

my_list = [1, 2, 3, 4, 5]
np_array = np.array(my_list)
print(np_array)

输出:

[1 2 3 4 5]

在这个例子中,我们从一个Python列表创建了一个一维的NumPy数组。

创建多维数组:
 my_matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
np_matrix = np.array(my_matrix)
print(np_matrix)

输出:

[[1 2 3]
 [4 5 6]
 [7 8 9]]

这里,我们创建了一个二维数组,它包含三个子列表,每个子列表代表矩阵的一行。

使用NumPy内置函数创建数组:

NumPy提供了许多内置函数来创建数组:

np_zeros = np.zeros((3, 3))
np_ones = np.ones((2, 4))
np_eye = np.eye(3)

print("Zeros Array:\n", np_zeros)
print("Ones Array:\n", np_ones)
print("Identity Matrix:\n", np_eye)

输出:

Zeros Array:
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]

Ones Array:
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]]

Identity Matrix:
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

以上例子分别展示了如何创建全零矩阵、全一矩阵以及单位矩阵。

2. NumPy数组的属性

理解NumPy数组的属性有助于更好地操作和利用这些数组。以下是一些常用的属性:

数组的维度(ndim):
print(np_matrix.ndim)

输出:

2

该属性返回数组的维度。对于二维数组,返回值为2。

数组的形状(shape):
print(np_matrix.shape)

输出:

(3, 3)

shape属性返回一个元组,表示数组的维度大小。对于一个3x3的矩阵,它返回(3, 3)

数组的元素个数(size):
print(np_matrix.size)

输出:

9

size属性返回数组中元素的总个数。

数组元素的数据类型(dtype):
print(np_matrix.dtype)

输出:

int64

dtype属性显示数组中元素的数据类型。在这个例子中,数组元素的数据类型为64位整数。

3. NumPy数组的索引与切片

类似于Python列表,NumPy数组也支持索引和切片操作,可以方便地访问和修改数组中的元素。

一维数组的索引:
arr = np.array([10, 20, 30, 40, 50])
print(arr[1])  # 访问第二个元素

输出:

20
二维数组的索引:
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix[1, 2])  # 访问第二行第三列的元素

输出:

6
数组切片:
print(arr[1:4])  # 获取第二个到第四个元素的子数组

输出:

[20 30 40]

数组切片操作返回一个新的数组,该数组包含原始数组的一个子集。


第三部分:NumPy数组操作

1. NumPy数组的索引与切片(进阶)

在之前的基础部分,我们已经了解了一维和二维数组的基本索引与切片操作。接下来,我们将深入探讨更多高级的索引与切片技巧,这些技巧能帮助我们更灵活地操作数组数据。

布尔索引

布尔索引用于基于条件来选择数组中的元素。这对于筛选满足特定条件的元素非常有用。

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
bool_idx = arr > 5
print(bool_idx)

输出:

[False False False False False  True  True  True  True  True]

可以看到,bool_idx是一个布尔数组,表示哪些元素满足arr > 5这个条件。我们可以用这个布尔数组直接索引原数组:

print(arr[bool_idx])

输出:

[ 6  7  8  9 10]
花式索引

花式索引允许我们使用数组或列表来指定索引顺序,从而按特定顺序选择数组中的元素。

arr = np.array([10, 20, 30, 40, 50])
indices = [0, 3, 4]
print(arr[indices])

输出:

[10 40 50]
多维数组的切片

对于多维数组,切片操作可以同时作用于多个维度。

matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix[:2, 1:3])  # 获取前两行中第二列和第三列的子数组

输出:

[[2 3]
 [5 6]]

在这个例子中,我们使用了两个切片,第一个切片[:2]表示选择前两行,第二个切片[1:3]表示选择第二列和第三列。

2. NumPy数组的形状变换

有时我们需要对数组的形状进行变换,比如将一维数组转换为二维数组,或者将多维数组展平成一维数组。NumPy提供了多种方法来进行形状变换。

reshape

reshape方法可以改变数组的形状而不改变数据内容。

arr = np.array([1, 2, 3, 4, 5, 6])
reshaped_arr = arr.reshape((2, 3))
print(reshaped_arr)

输出:

[[1 2 3]
 [4 5 6]]

这里,我们将一个一维的数组转换为一个2x3的二维数组。

ravel

ravel方法将多维数组展平成一维数组。

matrix = np.array([[1, 2, 3], [4, 5, 6]])
flattened = matrix.ravel()
print(flattened)

输出:

[1 2 3 4 5 6]
transpose

transpose方法用于矩阵的转置操作,交换数组的维度。

matrix = np.array([[1, 2, 3], [4, 5, 6]])
transposed = matrix.transpose()
print(transposed)

输出:

[[1 4]
 [2 5]
 [3 6]]

3. 数组间的运算

NumPy的强大之处在于它可以对数组进行高效的元素级运算。这使得大量数据的计算变得非常高效。

数组的算术运算

NumPy支持基本的算术运算,这些运算都是元素级别的。

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

# 加法
print(arr1 + arr2)
# 乘法
print(arr1 * arr2)

输出:

[5 7 9]
[ 4 10 18]
数组与标量的运算

NumPy也支持数组与标量之间的运算,这同样是元素级别的。

arr = np.array([1, 2, 3])
print(arr * 2)

输出:

[2 4 6]
广播机制

广播是NumPy的一个强大特性,它允许对形状不同的数组进行算术运算。NumPy会自动扩展较小的数组,使得它们的形状兼容,从而完成运算。

arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([1, 0, 1])

print(arr1 + arr2)

输出:

[[2 2 4]
 [5 5 7]]

在这个例子中,arr2的形状为(3,),它被广播为(2, 3)的形状,从而与arr1进行加法运算。


【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧2:https://developer.aliyun.com/article/1617471

目录
相关文章
|
2天前
|
机器学习/深度学习 并行计算 大数据
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧2
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
18 10
|
1天前
|
数据挖掘 iOS开发 MacOS
利用Python计算农历日期
利用Python计算农历日期
10 4
|
2天前
|
机器学习/深度学习 算法 数据挖掘
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧1
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
16 5
|
2天前
|
机器学习/深度学习 算法 数据可视化
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧2
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
5 1
|
1天前
|
IDE 开发工具 iOS开发
Python编程案例:中文金额转换并计算
Python编程案例:中文金额转换并计算
|
12天前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
33 0
|
2月前
|
机器学习/深度学习 数据处理 计算机视觉
NumPy实践宝典:Python高手教你如何轻松玩转数据处理!
【8月更文挑战第22天】NumPy是Python科学计算的核心库,专长于大型数组与矩阵运算,并提供了丰富的数学函数。首先需安装NumPy (`pip install numpy`)。之后可通过创建数组、索引与切片、执行数学与逻辑运算、变换数组形状及类型、计算统计量和进行矩阵运算等操作来实践学习。NumPy的应用范围广泛,从基础的数据处理到图像处理都能胜任,是数据科学领域的必备工具。
47 0
|
13天前
|
机器学习/深度学习 算法 数据可视化
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
特征工程是机器学习流程中的关键步骤,通过将原始数据转换为更具意义的特征,增强模型对数据关系的理解能力。本文重点介绍处理数值变量的高级特征工程技术,包括归一化、多项式特征、FunctionTransformer、KBinsDiscretizer、对数变换、PowerTransformer、QuantileTransformer和PCA,旨在提升模型性能。这些技术能够揭示数据中的潜在模式、优化变量表示,并应对数据分布和内在特性带来的挑战,从而提高模型的稳健性和泛化能力。每种技术都有其独特优势,适用于不同类型的数据和问题。通过实验和验证选择最适合的变换方法至关重要。
19 5
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
|
2月前
|
机器学习/深度学习 存储 算法
NumPy 与 SciPy:Python 科学计算库的比较
【8月更文挑战第30天】
78 5
|
2月前
|
存储 缓存 C语言