知道Numpy吗?它为什么是Python科学计算中不可或缺的一环

2023年 8月 28日 100.3k 0

NumPy是Python的一个科学计算库,它提供了高效的多维数组操作和数学函数。NumPy是许多其他Python科学库的基础,因为它提供了快速的数值计算和数据处理能力。在本文中,我们将深入介绍NumPy的使用,包括数组创建、索引、切片、数学运算、线性代数等方面的内容。

数组创建

NumPy中最基本的对象是数组(array),它是一种多维数组。在NumPy中,数组可以通过多种方式创建。以下是一些常用的数组创建方式:

从Python列表创建数组

NumPy可以从Python列表(list)创建数组。以下是一个示例:

import numpy as np

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

print(my_array)

输出:

[1 2 3 4 5]

从元组创建数组

NumPy也可以从元组(tuple)创建数组。以下是一个示例:

import numpy as np

my_tuple = (1, 2, 3, 4, 5)
my_array = np.array(my_tuple)

print(my_array)

输出:

[1 2 3 4 5]

使用zeros函数创建数组

使用zeros函数可以创建一个全是0的数组。以下是一个示例:

import numpy as np

my_array = np.zeros((3, 4))

print(my_array)

输出:

[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

使用ones函数创建数组

使用ones函数可以创建一个全是1的数组。以下是一个示例:

import numpy as np

my_array = np.ones((3, 4))

print(my_array)

输出:

[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]

使用arange函数创建数组

使用arange函数可以创建一个等差数列数组。以下是一个示例:

import numpy as np

my_array = np.arange(0, 10, 2)

print(my_array)

输出:

[0 2 4 6 8]

使用linspace函数创建数组

使用linspace函数可以创建一个等间隔数列数组。以下是一个示例:

import numpy as np

my_array = np.linspace(0, 1, 5)

print(my_array)

输出:

[0.   0.25 0.5  0.75 1.  ]

数组索引和切片

NumPy数组可以像Python列表一样进行索引和切片。以下是一些常用的数组索引和切片方式:

使用整数索引

可以使用整数索引获取数组中的元素。以下是一个示例:

import numpy as np

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

print(my_array[2])

输出:

3

使用切片

可以使用切片获取数组中的元素。以下是一个示例:

import numpy as np

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

print(my_array[1:4])

输出:

[2 3 4]

使用布尔索引

可以使用布尔索引获取数组中符合条件的元素。以下是一个示例:

import numpy as np

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

mask = my_array > 3
print(my_array[mask])

输出:

[4 5]

数学运算

NumPy提供了大量的数学函数,包括基本的算术运算、三角函数、指数函数、对数函数等。以下是一些常用的数学函数:

基本算术运算

NumPy提供了基本的算术运算,包括加、减、乘、除、求余等。以下是一个示例:

import numpy as np

a = np.array([1, 2, 3, 4, 5])
b = np.array([10, 20, 30, 40, 50])

print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a % b)

输出:

[11 22 33 44 55]
[-9 -18 -27 -36 -45]
[ 10  40  90 160 250]
[0.1 0.1 0.1 0.1 0.1]
[1 2 3 4 5]

三角函数

NumPy提供了多种三角函数,包括sin、cos、tan、arcsin、arccos、arctan等。以下是一个示例:

import numpy as np

a = np.array([0, np.pi/2, np.pi])
print(np.sin(a))
print(np.cos(a))
print(np.tan(a))

输出:

[0.0000000e+00 1.0000000e+00 1.2246468e-16]
[ 1.000000e+00  6.123234e-17 -1.000000e+00]
[ 0.00000000e+00  1.63312394e+16 -1.22464680e-16]

指数函数和对数函数

NumPy提供了多种指数函数和对数函数,包括exp、exp2、log、log2等。以下是一个示例:

import numpy as np

a = np.array([1, 2, 3])
print(np.exp(a))
print(np.exp2(a))
print(np.log(a))
print(np.log2(a))

输出:

[ 2.71828183  7.3890561  20.08553692]
[2. 4. 8.]
[0.         0.69314718 1.09861229]
[0.        1.        1.5849625]

线性代数

NumPy也提供了丰富的线性代数函数。以下是一些常用的线性代数函数:

矩阵乘法

NumPy提供了矩阵乘法运算。以下是一个示例:

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

print(np.matmul(a, b))

输出:

[[19 22]
 [43 50]]

矩阵求逆

NumPy提供了矩阵求逆运算。以下是一个示例:

import numpy as np

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

print(np.linalg.inv(a))

输出:

[[-2.   1. ]
 [ 1.5 -0.5]]

特征值和特征向量

NumPy提供了特征值和特征向量的计算函数。以下是一个示例:

import numpy as np

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

w, v = np.linalg.eig(a)
print(w)
print(v)

输出:

[-0.37228132  5.37228132]
[[-0.82456484 -0.41597356]
 [ 0.56576746 -0.90937671]]

示例代码

下面是一个完整的使用NumPy的示例代码,包括数组创建、索引、切片、数学运算、线性代数等方面的内容:

import numpy as np

# 从Python列表创建数组
my_list = [1, 2, 3, 4, 5]
my_array = np.array(my_list)
print(my_array)

# 从元组创建数组
my_tuple = (1, 2, 3, 4, 5)
my_array = np.array(my_tuple)
print(my_array)

# 使用zeros函数创建数组
my_array = np.zeros((3, 4))
print(my_array)

# 使用ones函数创建数组
my_array = np.ones((3, 4))
print(my_array)

# 使用arange函数创建数组
my_array = np.arange(0, 10, 2)
print(my_array)

# 使用linspace函数创建数组
my_array = np.linspace(0, 1, 5)
print(my_array)

# 使用整数索引
my_array = np.array([1, 2, 3, 4, 5])
print(my_array[2])

# 使用切片
my_array = np.array([1, 2, 3, 4, 5])
print(my_array[1:4])

# 使用布尔索引
my_array = np.array([1, 2, 3, 4, 5])
mask = my_array > 3
print(my_array[mask])

# 基本算术运算
a = np.array([1, 2, 3, 4, 5])
b = np.array([10, 20, 30, 40, 50])
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a % b)

# 三角函数
a = np.array([0, np.pi/2, np.pi])
print(np.sin(a))
print(np.cos(a))
print(np.tan(a))

# 指数函数和对数函数
a = np.array([1, 2, 3])
print(np.exp(a))
print(np.exp2(a))
print(np.log(a))
print(np.log2(a))

# 矩阵乘法
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(np.matmul(a, b))

# 矩阵求逆
a = np.array([[1, 2], [3, 4]])
print(np.linalg.inv(a))

# 特征值和特征向量
a = np.array([[1, 2], [3, 4]])
w, v = np.linalg.eig(a)
print(w)
print(v)

输出:

[1 2 3 4 5]
[1 2 3 4 5]
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
[0 2 4 6 8]
[0.   0.25 0.5  0.75 1.  ]
3
[2 3 4]
[4 5]
[11 22 33 44 55]
[-9 -18 -27 -36 -45]
[ 10  40  90 160 250]
[0.1 0.1 0.1 0.1 0.1]
[1 2 3 4 5]
[0.0000000e+00 1.0000000e+00 1.2246468e-16]
[ 1.000000e+00  6.123234e-17 -1.000000e+00]
[ 0.00000000e+00  1.63312394e+16 -1.22464680e-16]
[ 2.71828183  7.3890561  20.08553692]
[2. 4. 8.]
[0.         0.69314718 1.09861229]
[0.        1.        1.5849625]
[[19 22]
 [43 50]]
[[-2.   1. ]
 [ 1.5 -0.5]]
[-0.37228132  5.37228132]
[[-0.82456484 -0.41597356]
 [ 0.56576746 -0.90937671]]

结论

本文介绍了NumPy数组的创建、索引、切片、数学运算、线性代数等方面的内容。NumPy是Python科学计算的重要组件之一,具有强大的计算能力和高效的性能,是数据科学、机器学习、深度学习等领域必不可少的工具之一。

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论