Python——numpy库与random库

一、NumPy(Numerical Python)专门用于进行科学计算数值处理。它为处理大型多维数组和矩阵提供了高效的工具,并包括了许多高性能的数学函数,可以广泛用于数据分析、机器学习、数值模拟等领域。

NumPy的主要作用

  • 高效的多维数组操作

    • NumPy的核心是ndarray对象,这是一种多维数组,可以存储同类型的元素,并支持快速的元素操作。
    • NumPy数组相较于Python的列表具有更高的性能,尤其是在处理大规模数据时,因为NumPy是用C语言编写的,底层进行了大量优化。
  • 支持广播(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与其他科学计算和数据分析库(如SciPyPandasMatplotlibTensorFlow)无缝集成,常被用作这些库的基础数据结构。
  • NumPy也能够方便地与C、C++、Fortran等语言编写的代码进行交互。

二、random 是 Python 的一个内置库,用于生成随机数和执行随机选择。它提供了一系列函数来生成伪随机数,进行随机抽样和打乱数据等操作。以下是一些常用的功能和函数:

主要功能

  1. 生成随机数

    • random.random(): 返回一个 [0.0, 1.0) 范围内的随机浮点数。
    • random.uniform(a, b): 返回一个 [a, b] 范围内的随机浮点数。
  2. 生成整数

    • random.randint(a, b): 返回一个 [a, b] 范围内的随机整数(包括a和b)。
    • random.randrange(start, stop[, step]): 返回一个指定范围内的随机整数,类似于 range()
  3. 随机选择

    • random.choice(seq): 从非空序列 seq 中随机选择一个元素。
    • random.choices(population, weights=None, k=1): 从 population 中选择 k 个元素,可以指定权重。
  4. 打乱顺序

    • random.shuffle(x): 将列表 x 的元素随机排列(就地打乱)。
  5. 随机样本

    • 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 对象,包含从 startstop(不包含 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]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值