python 详解numpy

让我们深入了解一下 NumPy。NumPy 是 Python 中用于科学计算和数据分析的基础库之一。它提供了高效的多维数组对象 ndarray,以及许多用于数组计算、线性代数、傅里叶变换等方面的函数和工具。

安装 NumPy

首先,我们需要安装 NumPy 库。可以使用 pip 工具来完成安装:


pip install numpy

安装完成后,即可在 Python 脚本中导入 NumPy 库:


import numpy as np

创建 ndarray

在 NumPy 中,最重要的数据结构是 ndarray(N-dimensional array)。ndarray 是一个多维数组对象,由相同类型的元素组成。以下是创建 ndarray 的几种常见方式。

使用 array() 函数创建

可以使用 array() 函数来创建一个 ndarray。该函数接受一个序列(例如列表或元组)作为输入,并返回一个新的包含指定序列数据的 ndarry 对象。

python
import numpy as np

a = np.array([1, 2, 3])
print(a) # 输出:[1 2 3]

array() 函数还可以接受一个 dtype 参数,用于指定返回的 ndarry 对象中元素的类型:

python
import numpy as np

a = np.array([1, 2, 3], dtype=float)
print(a) # 输出:[1. 2. 3.]

使用 arange() 函数创建

arange() 函数类似于 Python 内置函数 range(),但它返回的是一个 ndarray 对象而不是列表。该函数接受三个参数:起始值(默认为0)、结束值(不包括)、步长(默认为1)。

python
import numpy as np

a = np.arange(0, 10, 2)
print(a) # 输出:[0 2 4 6 8]

使用 linspace() 函数创建

linspace() 函数用于创建等间隔数列。该函数接受三个参数:起始值、结束值、元素个数。

python
import numpy as np

a = np.linspace(0, 10, num=5)
print(a) # 输出:[0.   2.5  5.   7.5 10. ]

使用 zeros() 和 ones() 函数创建

zeros() 和 ones() 函数分别用于创建全零和全一矩阵。这两个函数都接受一个表示矩阵形状的元组作为输入参数。

python
import numpy as np

a = np.zeros((3,3))
print(a) # 输出:
# [[0. 0. 0.]
# [0. 0. 0.]
# [0. 0. 0.]]

b = np.ones((2,4))
print(b) # 输出:
# [[1., 1., 1., 1.],
# [1., 1., 1., 1.]]

c = np.eye(3)
print(c) # 输出:
# [[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]]

d = np.diag([2,4,6])
print(d) # 输出:
# [[2, 0, 0],
# [0, 4, 0],
# [0, 0, 6]]

数组属性与操作

在 NumPy 中,ndarray 具有许多属性和操作,下面介绍其中几个常见的属性和操作。

数组形状与大小

ndarray 对象有两个重要属性 shape 和 size 分别表示其形状和大小:

python
import numpy as np

a = np.array([[1,2],[3,4]])
print(a.shape) # 输出:(2,2)

b = a.reshape((4,))
print(b.shape) # 输出:(4,)

size 属性表示数组中元素总数:

python
import numpy as np

a = np.array([[1,2],[3,4]])print(a.size) # 输出:12
### 数组索引和切片与 Python 列表一样,ndarray 对象也可以通过索引和切片来访问其中的元素。但是,由于 ndarray 是多维数组对象,因此其索引和切片方式也有所不同。#### 索引对于一维数组,可以使用类似列表的方式来进行索引:
import numpy as npa = np.array([1, 2, 3])print(a[0]) # 输出:1
对于多维数组,则需要指定每个轴上的索引值:
pythonimport numpy as npa = np.array([[1, 2], [3, 4]])print(a[0, 0]) # 输出:1
#### 切片对于一维数组,切片方式与列表相同:
pythonimport numpy as npa = np.array([1, 2, 3])print(a[:2]) # 输出:[1 2]
对于多维数组,则需要在每个轴上指定要取得的范围:
pythonimport numpy as npa = np.array([[1, 2], [3, 4], [5, 6]])print(a[:2,:1]) # 输出:# [[1]# [3]]
### 数组运算在 NumPy 中,ndarray 对象支持基本的数学运算符(如 +、-、* 和 /)以及其他操作(如矩阵乘法)。这些运算符都是按元素执行的。
pythonimport numpy as npa = np.array([1, 2, 3])b = np.array([4, 5, 6])c = a + b d = a * b e = a.dot(b)print(c) # 输出:[5 7 9]print(d) # 输出:[4 10 18]print(e) # 输出:32
除了逐元素计算之外,NumPy 还提供了许多函数用于处理 ndarry 对象。例如 sum() 函数可用于计算所有元素的总和:
pythonimport numpy as npa = np.array([1, 2, 3])b = a.sum()print(b) # 输出:6
## 广播机制广播机制(broadcasting)是 NumPy 中一个非常强大的功能。它允许不同形状的数组进行数学运算而无需复制数据。简单地说,广播机制会自动扩展维度较小的数组,并将其重复以匹配另一个较大数组。例如,在以下示例中,我们将一个标量加到一个二维矩阵中:
pythonimport numpy as npa = np.ones((3,3))b = a + 3 print(b)# 输出:# [[4. 4. 4.]# [4. 4. 4.]# [4. 4. 4.]]
在这里,标量值被扩展为一个形状与 a 相同的二维矩阵,并且两个矩阵相加得到结果 b。## 线性代数运算NumPy 提供了许多用于线性代数计算的函数和工具。下面介绍几个常见的线性代数运算。### 点积(内积)点积是两个向量之间进行乘法运算并求和得到结果。在 NumPy 中可以使用 dot() 函数来计算点积。
pythonimport numpy as npa = [1,2]b = [3,4]c = np.dot(a,b)print(c) # 输出:11

求逆矩阵、行列式和特征值等操作NumPy 还提供了许多其他线性代数相关的函数和工具,包括求逆矩阵、行列式、特征值等操作。这些函数都在 linalg 模块中。

import numpy as np
a = np.array([[1,2],[3,4]])

求逆矩阵

b = np.linalg.inv(a)print(b) # 输出:

[[-2. 1. ]

[ 1.5 -0.5]]

求行列式c = np.linalg.det(a)print©

输出:-2.0

求特征值和特征向量

d, e = np.linalg.eig(a)
print(d) # 输出:[-0.37228132 5.37228132]
print(e)

输出:

[[-0.82456484 -0.41597356]

[ 0.56576746 -0.90937671]]

总结本文介绍了 NumPy 的基础知识,包括如何安装和导入库、如何创建 ndarray 数组、数组属性和操作、数组运算、广播机制以及线性代数运算等内容。NumPy 是 Python 中用于科学计算和数据分析的重要基础库之一,掌握其基础知识对于进行数据处理和分析非常有帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

实相无相

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值