【技术积累】Python中的NumPy库【二】
NumPy库的主要类有哪些?
NumPy库的主要类包括:
ndarray:N维数组对象,是NumPy最重要的类之一。它是Python中数组的基本数据结构,可以进行高效的数学计算和数据处理操作。
ufunc:通用函数对象,是NumPy库中的另一个重要类。它是一种高效的元素级运算工具,提供了基本的数学运算、逻辑运算和位运算等基本的数学和逻辑操作。
linspace:生成一定数量的等差数列,返回一个一维数组。
meshgrid:用于生成二维的坐标矩阵,常用于三维绘图和计算机图形学等领域。
random:随机数生成器,提供了众多生成随机数和随机样本的函数,常用于模型训练和数据分析。
matlib:矩阵库,提供了各种矩阵操作和矩阵运算的函数,包括矩阵乘法、矩阵分解和矩阵求逆等。
fft:快速傅里叶变换(FFT)类,提供了高效的傅里叶变换算法,常用于信号处理和图像处理等领域。
poly:多项式类,提供了多项式求解、多项式拟合和多项式积分等数学运算。常用于数据拟合和模型建立。
linalg:线性代数类,提供了各种线性代数运算的函数,包括矩阵求逆、特征值求解和奇异值分解等。常用于数据分析和机器学习等领域。
NumPy库和Python自带的列表有什么区别?
NumPy库是Python中用于科学计算和数学计算的常用库,它提供了多维数组对象和各种数学函数和操作。相比于Python自带的列表,NumPy数组具有以下几点优势:
内存占用少:NumPy数组中的所有元素都是相同的数据类型,因此内存占用更小,运行速度更快。
数组操作方便:NumPy数组可以进行各种数学运算和逻辑运算,例如矩阵乘法、数组切片、数组重塑等操作,这些操作可以在不使用循环的情况下完成。
广播功能:NumPy数组可以进行广播操作,即对形状不同的数组进行相应的操作,这大大减少了数组形状不同需要循环处理的情况。
而Python自带的列表则是一种基本的数据结构,可以存储任意的对象。相较于NumPy数组,其灵活性更高,可以进行各种操作,同时也更容易理解和使用。但列表的操作性能在大型数据集时会比NumPy数组慢。
如何将Python数列转换为NumPy数组?
将Python数列(即列表)转换为NumPy数组可以使用NumPy库中的array()函数。该函数接受一个列表参数,返回一个NumPy数组。
下面是一个示例代码:
import numpy as np
# 定义一个Python数列
lst = [1, 2, 3, 4, 5]
# 转换为NumPy数组
arr = np.array(lst)
# 输出结果
print(arr)
输出结果为:
[1 2 3 4 5]
在上面的代码中,我们首先导入了NumPy库。然后,我们定义了一个Python数列lst。接着,我们使用array()函数将lst转换为NumPy数组arr。最后,我们输出了arr的值。
注意,当我们将Python数列转换为NumPy数组时,NumPy会自动根据数列中的值的类型来推断生成的数组的数据类型。例如,上面的代码中lst是一个包含整数的数列,因此生成的数组也是整数类型的。如果数列中包含浮点数,则生成的数组将是浮点数类型的。
NumPy库中的数组是什么?有哪些特征?如何创建
NumPy库中的数组是一种多维数组对象,又称为ndarray。这些数组是用来存储相同数据类型的元素(例如int、float等),它是一个可变的对象,可以在其中进行快速且有效的数据操作。
以下是NumPy数组的一些特征:
- 数组是一种类似于列表的对象,但在NumPy中,它们可以包含更多的维度。
- 数组中的元素必须是相同的类型。
- NumPy数组的大小是固定的,也就是说,一旦创建,就无法再加入新元素。
- 数组可以通过下标访问,也可以使用NumPy提供的高效的函数对数组进行操作。
以下是创建NumPy数组的几种方式:
1. 通过列表创建
import numpy as np
a = np.array([1, 2, 3]) # 一维数组
b = np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组
2. 通过arange函数创建
import numpy as np
a = np.arange(10) # 生成一维数组[0 1 2 3 4 5 6 7 8 9]
b = np.arange(0, 10, 2) # 生成一维数组[0 2 4 6 8],步长为2
c = np.arange(12).reshape(3, 4) # 生成二维数组
3. 使用zeros和ones函数创建
import numpy as np
a = np.zeros(5) # 生成一维数组[0. 0. 0. 0. 0.]
b = np.zeros((2, 3)) # 生成二维数组
c = np.ones((2, 4, 3)) # 生成三维数组,全部元素为1
4. 使用random函数创建
import numpy as np
a = np.random.rand(3) # 生成一维数组,元素是[0, 1)之间的随机数
b = np.random.randn(3, 2) # 生成二维数组,元素是标准正态分布的随机数
c = np.random.randint(1, 10, size=(2, 3)) # 生成二维数组,元素是1-10之间的随机整数
如何使用NumPy数组进行算术运算
import numpy as np
# 创建两个NumPy数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 加法
c = a + b
print("加法:", c) # [5 7 9]
# 减法
c = a - b
print("减法:", c) # [-3 -3 -3]
# 乘法
c = a * b
print("乘法:", c) # [ 4 10 18]
# 除法
c = a / b
print("除法:", c) # [0.25 0.4 0.5 ]
# 指数
c = np.power(a, 2)
print("指数:", c) # [1 4 9]
# 平方根
c = np.sqrt(a)
print("平方根:", c) # [1. 1.41421356 1.73205081]
# 取反
c = -a
print("取反:", c) # [-1 -2 -3]
如何使用NumPy数组进行三角函数运算?
import numpy as np
# 创建一个长度为10的一维NumPy数组
arr = np.array([0, np.pi/6, np.pi/4, np.pi/3, np.pi/2, np.pi, 3*np.pi/2, 2*np.pi/3, 3*np.pi/4, 5*np.pi/6])
# 计算数组中每个元素的正弦值
sin_arr = np.sin(arr)
print("sin函数结果:", sin_arr)
# 计算数组中每个元素的余弦值
cos_arr = np.cos(arr)
print("cos函数结果:", cos_arr)
# 计算数组中每个元素的正切值
tan_arr = np.tan(arr)
print("tan函数结果:", tan_arr)
输出结果:
sin函数结果: [ 0. 0.5 0.70710678 0.8660254 1. 0.
-1. -0.8660254 -0.70710678 -0.5 ]
cos函数结果: [ 1.00000000e+00 8.66025404e-01 7.07106781e-01 5.00000000e-01
6.12323400e-17 -1.00000000e+00 -1.83697020e-16 -5.00000000e-01
-7.07106781e-01 -8.66025404e-01]
tan函数结果: [ 0.00000000e+00 5.77350269e-01 1.00000000e+00 1.73205081e+00
1.63312394e+16 -1.22464680e-16 5.44374645e+15 1.73205081e+00
1.00000000e+00 5.77350269e-01]
如何使用NumPy数组进行指数和对数运算?
NumPy数组可以使用exponential(指数)和logarithmic(对数)函数进行指数和对数运算。
exponential函数计算每个元素的指数值,logarithmic函数计算每个元素的自然对数,也可以计算底数为其他常数的对数。
下面是一个简单的例子,演示如何使用NumPy数组进行指数和对数操作。
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
# 指数运算
print("exponential:", np.exp(arr))
# 自然对数
print("natural logarithm:", np.log(arr))
# 底数为2的对数
print("log base 2:", np.log2(arr))
# 底数为10的对数
print("log base 10:", np.log10(arr))
在上面的例子中,我们创建了一个一维NumPy数组,并使用numpy.exp函数计算每个元素的指数值,使用numpy.log函数计算每个元素的自然对数,使用numpy.log2函数计算底数为2的对数,使用numpy.log10函数计算底数为10的对数。
输出结果如下:
exponential: [ 2.71828183 7.3890561 20.08553692 54.59815003 148.4131591 ]
natural logarithm: [ 0. 0.69314718 1.09861229 1.38629436 1.60943791]
log base 2: [ 0. 1. 1.5849625 2. 2.32192809]
log base 10:[ 0. 0.30103 0.47712125 0.60205999 0.69897 ]
因此,使用NumPy进行指数和对数计算非常简单,只需调用相应的函数即可。
如何使用NumPy数组进行统计运算
NumPy是Python中用于数值计算和科学计算的常用库。它提供了一个称为ndarray的多维数组对象,可以使用它进行统计运算。
以下是一个使用NumPy数组进行统计运算的例子:
import numpy as np
# 创建一个随机数组
arr = np.random.randn(100)
# 计算数组的均值、中位数、标准差和方差
mean = np.mean(arr)
median = np.median(arr)
std_dev = np.std(arr)
variance = np.var(arr)
print('均值:', mean)
print('中位数:', median)
print('标准差:', std_dev)
print('方差:', variance)
上面的代码创建了一个包含100个随机数的NumPy数组,然后对数组进行了一些统计运算。np.mean()函数计算数组的均值,np.median()函数计算中位数,np.std()函数计算标准差,np.var()函数计算方差。
输出结果可能会因为随机数的不同而有所不同,但通常会接近以下值:
均值: 0.03821741789938476
中位数: 0.04451500104648571
标准差: 0.9616266701218458
方差: 0.9241266652394576
如何使用NumPy数组进行线性代数运算?
NumPy是基于Python的库,主要用于科学计算。NumPy中包含大量的数学函数,以支持矩阵和数组的运算。在NumPy中,数组对象被称为ndarray,可以进行各种数学运算。下面是使用NumPy数组进行线性代数运算的案例:
import numpy as np
# 定义 NumPy 数组
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
B = np.array([1, 2, 3])
# 计算 A 的逆矩阵
A_inv = np.linalg.inv(A)
# 求解线性方程组 Ax = B
x = np.linalg.solve(A, B)
# 计算 A 和 B 的乘积
C = A.dot(B)
# 计算 A 和 B 的点积
D = np.dot(A, B)
# 计算矩阵 A 的行列式
det_A = np.linalg.det(A)
# 计算矩阵 A 的特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(A)
# 打印结果
print('A:')
print(A)
print('A_inv:')
print(A_inv)
print('B:')
print(B)
print('x:')
print(x)
print('C:')
print(C)
print('D:')
print(D)
print('det_A:')
print(det_A)
print('eigenvalues:')
print(eigenvalues)
print('eigenvectors:')
print(eigenvectors)
这是一个简单的NumPy数组线性代数运算的示例,包括计算逆矩阵、求解线性方程组、计算矩阵乘积、点积、矩阵行列式、特征值和特征向量等等。在NumPy中,还有很多其他的线性代数运算函数可供使用。
如何使用NumPy数组进行傅里叶变换
NumPy中的傅里叶变换函数位于numpy.fft模块中,其中包括傅里叶变换、逆变换和频率域滤波等功能。以下是使用NumPy数组进行傅里叶变换的示例:
import numpy as np
import matplotlib.pyplot as plt
# 生成信号
fs = 1000 # 采样率
t = np.arange(0, 1, 1/fs) # 时间轴
f1, f2 = 10, 100 # 两个频率成分
s = np.sin(2*np.pi*f1*t) + 0.5*np.sin(2*np.pi*f2*t)
# 进行傅里叶变换
S = np.fft.fft(s) # 频域信号
freqs = np.fft.fftfreq(len(s), 1/fs) # 频率轴
# 绘制原始信号
plt.subplot(2, 1, 1)
plt.plot(t, s)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title('Original Signal')
# 绘制频域信号
plt.subplot(2, 1, 2)
plt.plot(freqs, np.abs(S))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.title('Frequency Domain Signal')
plt.show()
在此示例中,我们生成了一个包含两个频率成分的信号,并利用`np.fft.fft()`函数进行了傅里叶变换,得到了信号的频域表示。然后,利用`np.fft.fftfreq()`函数生成了频率轴,最后将时域信号和频域信号绘制在同一张图中进行比较。
需要注意的是,在进行傅里叶变换之前,需要保证信号的采样率是足够高的,以避免出现混淆和重叠的频率成分。此外,傅里叶变换生成的频域信号一般是对称的,因此通常只需要使用其一半进行后续处理和分析。
如何使用NumPy数组进行形状变换?
NumPy提供了多种方法用于数组形状变换。可以使用reshape函数重新构造数组的形状,也可以使用transpose函数交换数组的维度。
示例代码:
import numpy as np
# 创建一个包含1~9的一维数组
arr = np.arange(1, 10)
# 将一维数组重塑为3 X 3的二维数组
arr_reshaped = arr.reshape((3, 3))
# 输出二维数组
print("Reshaped array:\n", arr_reshaped)
# 交换二维数组的维度
arr_transposed = arr_reshaped.transpose()
# 输出交换维度后的数组
print("Transposed array:\n", arr_transposed)
输出结果:
Reshaped array:
[[1 2 3]
[4 5 6]
[7 8 9]]
Transposed array:
[[1 4 7]
[2 5 8]
[3 6 9]]
在上面的代码中,我们从1到9创建了一个一维数组,并使用reshape函数将其重新整形为3 X 3的二维数组。然后,我们使用transpose函数交换了数组的维度,并输出了结果。
【技术积累】Python中的NumPy库【二】的更多相关文章
- Python中的numpy库介绍!
转自:https://blog.csdn.net/codedz/article/details/82869370 机器学习算法中大部分都是调用Numpy库来完成基础数值计算的.安装方法: pip3 i ...
- 【归纳】正则表达式及Python中的正则库
正则表达式 正则表达式30分钟入门教程 runoob正则式教程 正则表达式练习题集(附答案) 元字符\b代表单词的分界处,在英文中指空格,标点符号或换行 例子:\bhi\b可以用来匹配hi这个单词,且 ...
- 利用Python中的mock库对Python代码进行模拟测试
这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下 ...
- python中的类(二)
python中的类(二) 六.类的成员 字段:普通字段,静态字段 eg: class Province(): country=’中国’ #静态字段,保存在类中,执行时可以通过类或对象访问 def __ ...
- Python中使用第三方库xlrd来写入Excel文件示例
Python中使用第三方库xlrd来写入Excel文件示例 这一篇文章就来介绍下,如何来写Excel,写Excel我们需要使用第三方库xlwt,和xlrd一样,xlrd表示read xls,xlwt表 ...
- 机器学习中的numpy库
日常学习中总是遇到数据需要处理等问题,这时候我们就可以借助numpy这个工具来做一些有意思的事. 1.生成随机数的几种方式 x=np.random.random(12) ###生成12 ...
- Python中的Numpy、SciPy、MatPlotLib安装与配置
Python安装完Numpy,SciPy和MatplotLib后,可以成为非常犀利的科研利器.网上关于这三个库的安装都写得非常不错,但是大部分人遇到的问题并不是如何安装,而是安装好后因为配置不当,在使 ...
- 一个完整的机器学习项目在Python中的演练(二)
大家往往会选择一本数据科学相关书籍或者完成一门在线课程来学习和掌握机器学习.但是,实际情况往往是,学完之后反而并不清楚这些技术怎样才能被用在实际的项目流程中.就像你的脑海中已经有了一块块"拼 ...
- python中常用的模块二
一.序列化 指:在我们存储数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和传输的数据格式,这个就是序列化, 不同的序列化结果不同,但目的是一样的,都是为了存储和传输. 一,pickle.可 ...
- 【转】利用Python中的mock库对Python代码进行模拟测试
出处 https://www.toptal.com/python/an-introduction-to-mocking-in-python http://www.oschina.net/transla ...
随机推荐
- SpringBoot高频面试题
Springboot的优点 内置servlet容器,不需要在服务器部署 tomcat.只需要将项目打成 jar 包,使用 java -jar xxx.jar一键式启动项目 SpringBoot提供了s ...
- jmeter分布式测试安装部署步骤
一.下载linux版本的jdk ----注:下载的jdk和jmeter要与window的jdk和jmeter一致 下载地址:https://www.oracle.com/java/technologi ...
- pandas之窗口函数
为了能更好地处理数值型数据,Pandas 提供了几种窗口函数,比如移动函数(rolling).扩展函数(expanding)和指数加权函数(ewm).窗口函数应用场景非常多.举一个简单的例子:现在有 ...
- [Java SE]Unicode解码
文由 将ASCII等其他非Unicode字符与Unicode混合的"脏的.不规范的"编码文本转为正常文本. 源码 unicodetoString(String unicodeTex ...
- v-if与v-for的优先级
在Vue2中 v-for的优先级要高于v-if 在Vue3中 v-if 的优先级要高于v-for
- Disruptor-源码解读
前言 Disruptor的高性能,是多种技术结合以及本身架构的结果.本文主要讲源码,涉及到的相关知识点需要读者自行去了解,以下列出: 锁和CAS 伪共享和缓存行 volatile和内存屏障 原理 此节 ...
- c/c++快乐算法第一天
c/c++感受算法乐趣(1) 开始时间2023-04-14 18:31:47 结束时间2023-04-14 22:06:02 前言:经过两天的学习,是不是发现编程也挺简单的.其实不然,学好算法同时也是 ...
- C# 从0到实战--程序入门:基本程序结构·hello,world
为什么要写博客 某人是一名大学生,到了大二,学院开始教授.Net,从这里我接触到了C#和ASP.Net,这些技术让我感到了想不到的快速开发之震撼.于是突发奇想,写此博客来记录我的学习路程.博客不仅仅是 ...
- Spring中事务嵌套这么用一定得注意了!!
前言 最近项目上有一个使用事务相对复杂的业务场景报错了.在绝大多数情况下,都是风平浪静,没有问题.其实内在暗流涌动,在有些异常情况下就会报错,这种偶然性的问题很有可能就会在暴露到生产上造成事故,那究竟 ...
- Python_11 类的方法
一.查缺补漏 1. 实例方法必须用类实例化对象()来调用,用类来调用时会执行,但是self中不是实例化类地址而是传的字符串 二.类中的方法 1. 实例方法 1. 定义在类里面的普通方法(函数) 2. ...