一、NumPy(Numerical Python)专门用于进行科学计算和数值处理。它为处理大型多维数组和矩阵提供了高效的工具,并包括了许多高性能的数学函数,可以广泛用于数据分析、机器学习、数值模拟等领域。
NumPy的主要作用
-
高效的多维数组操作:
- NumPy的核心是
ndarray
对象,这是一种多维数组,可以存储同类型的元素,并支持快速的元素操作。 - NumPy数组相较于Python的列表具有更高的性能,尤其是在处理大规模数据时,因为NumPy是用C语言编写的,底层进行了大量优化。
- NumPy的核心是
-
支持广播(Broadcasting):
- NumPy支持不同形状的数组进行算术操作,这叫做广播,可以避免对数组形状的繁琐调整。
- 例如,将标量加到数组的每个元素上,或将较小的数组“扩展”以与较大的数组进行逐元素操作。
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
result = a + b # [5, 7, 9]
-
提供大量的数学和统计函数: NumPy库中有许多内置的函数,用于进行各种数学运算和统计分析:
- 基本运算(加减乘除、开方、幂次等)。
- 聚合运算(求和、平均值、方差、标准差等)。
- 线性代数运算(矩阵乘法、求逆、特征值分解等)。
- 随机数生成(用于模拟或统计的随机数生成器)。
-
支持线性代数和傅里叶变换:
- NumPy具有强大的线性代数模块,支持矩阵运算、解线性方程组、奇异值分解等操作。
- 傅里叶变换工具可以用于信号处理等领域。
# 矩阵乘法
matrix_a = np.array([[1, 2], [3, 4]])
matrix_b = np.array([[5, 6], [7, 8]])
result = np.dot(matrix_a, matrix_b)
快速生成数组: NumPy提供了一些便捷的方法用于生成特定类型的数组:
- 创建全0数组、全1数组、空数组、单位矩阵等。
- 创建等差数列或等比数列。
- 随机数生成。
zeros_array = np.zeros((3, 3)) # 3x3的零矩阵
ones_array = np.ones((2, 2)) # 2x2的全1矩阵
random_array = np.random.rand(2, 2) # 2x2的随机数矩阵
这里生成的数组和列表有什么区别呢
1、列表为python的基本数据结构之一(列表、字典、元组等);数组的创建需要引入一些库或者包
2、列表可以存储任何类型的数据,数组只能存储单一类型的数据
3、列表只能使用加号运算,数组可以进行四则运算
Python的数组分三种类型:
(1) list 普通的链表,初始化后可以通过特定方法动态增加元素。
定义方式:arr = [元素]
(2) Tuple 固定的数组,一旦定义后,其元素个数是不能再改变的。
定义方式:arr = (元素)
(2) Dictionary 词典类型, 即是Hash数组。
定义方式:arr = {元素k:v}
列表是Python中最常用的数据类型之一,可以使用NumPy库的array()函数将列表转换为数组。
兼容性和集成性:
- NumPy与其他科学计算和数据分析库(如
SciPy
、Pandas
、Matplotlib
、TensorFlow
)无缝集成,常被用作这些库的基础数据结构。 - NumPy也能够方便地与C、C++、Fortran等语言编写的代码进行交互。
二、random
是 Python 的一个内置库,用于生成随机数和执行随机选择。它提供了一系列函数来生成伪随机数,进行随机抽样和打乱数据等操作。以下是一些常用的功能和函数:
主要功能
-
生成随机数:
random.random()
: 返回一个 [0.0, 1.0) 范围内的随机浮点数。random.uniform(a, b)
: 返回一个 [a, b] 范围内的随机浮点数。
-
生成整数:
random.randint(a, b)
: 返回一个 [a, b] 范围内的随机整数(包括a和b)。random.randrange(start, stop[, step])
: 返回一个指定范围内的随机整数,类似于range()
。
-
随机选择:
random.choice(seq)
: 从非空序列seq
中随机选择一个元素。random.choices(population, weights=None, k=1)
: 从population
中选择k
个元素,可以指定权重。
-
打乱顺序:
random.shuffle(x)
: 将列表x
的元素随机排列(就地打乱)。
-
随机样本:
random.sample(population, k)
: 从population
中随机选择k
个唯一元素,返回一个新列表。
#random.random()与random.rand()的区别
-
random.random() 是一个函数,它返回一个在[0.0, 1.0)之间的随机浮点数。这个函数是Python标准库中的一部分,用于生成0到1之间的随机数。每次调用
random.random()
时,都会返回一个在这个范围内的随机浮点数。 -
random.rand() 并不是Python标准库中的直接函数,但在NumPy库中存在类似功能的函数
:ml-search[numpy.random.rand()]
,它返回一个或多个在[0, 1)范围内的随机浮点数,这些数构成一个数组。这个函数通常用于生成多维数组的随机数,其参数可以是一个或多个整数,表示数组的维度。 -
random.Random() 是一个类,它返回一个随机数生成器的实例。这个类提供了多种方法来生成不同类型的随机数,包括整数、浮点数等。与
random.random()
不同,random.Random()
允许用户创建多个独立的随机数生成器实例,这对于需要不同随机数序列的应用非常有用。
总结来说,random.random()
用于生成单个的随机浮点数,而random.rand()
(在NumPy中)用于生成多维数组的随机数。
关于random.rand()函数的一些操作:
虽然说random.rand()只能生成0-1范围内的随机数,但是我们可以进行一些操作来改变生成随机数的范围,如下代码生成了100个-4-2区间内的随机数
import matplotlib.pyplot as plt
import numpy as np
#####生成数的区间为[-4,2]
d = np.random.rand(100)*6-4
print(d)
plt.plot(d,'r+')#####r:颜色-红色;.:形状为.
plt.show()
相关实例演示:
data = np.random.rand(1000,2)
print(data)
print(data[1]) #索引第1行
print(data[:, 1])#索引第1列
x = data[:, 0]
y = data[:, 1]
# 画图
plt.plot(x,y,'go',markersize=10)
plt.show()
将坐标范围变成(-1,1)
需要改变数据的取值范围即:
data = 2*np.random.rand(1000,2)-1
将样本点的范围控制在圆内
1、创建布尔数组,计算 x**2 和 y**2 的和,然后判断它们的和是否小于 1。如果小于 1,idx 的值就为 True,否则为 False。 2、使用布尔索引 idx 来筛选数组 x 和 y 中满足 x**x + y**y < 1 条件的值
idx = x**2 + y**2 <1
plt.plot(x[idx],y[idx],'go',markersize=1)
将样本点的范围控制在圆环内
hole = x**2 + y**2 <0.15
idx = np.logical_and(idx,~hole)
#~hole:不在hole范围的数据和idx范围的数据求交集
plot函数参数解释:
x,y为变量代表图中点的坐标;‘g’:颜色为绿色;‘o’:图像点的形状为o形;‘markersize’:点的大小
三、arrange函数是 NumPy 库中的一个非常实用的函数,用于生成一个数组,其元素是一个范围内的均匀分布的值。它的基本语法如下:
numpy.arange([start, ]stop[, step, ], dtype=None)
参数说明:
- start(可选):范围的起始值,默认值为 0。
- stop:范围的结束值(不包含该值)。
- step(可选):元素之间的间隔,默认值为 1。
- dtype(可选):指定返回数组的数据类型。
返回值:
- 返回一个 ndarray 对象,包含从
start
到stop
(不包含stop
)的值,步长为step
。
import numpy as np
# 生成从0到9的整数
arr1 = np.arange(10)
print(arr1) # 输出: [0 1 2 3 4 5 6 7 8 9]
# 生成从1到10的整数
arr2 = np.arange(1, 11)
print(arr2) # 输出: [ 1 2 3 4 5 6 7 8 9 10]
# 生成从0到10,步长为2的整数
arr3 = np.arange(0, 10, 2)
print(arr3) # 输出: [0 2 4 6 8]
# 生成浮点数数组
arr4 = np.arange(0, 1, 0.1)
print(arr4) # 输出: [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]