当前位置: 首页 > news >正文

【数学建模】—【Python库】—【Numpy】—【学习】

目录

​编辑

1. NumPy安装

2. ndarray对象

1. 创建ndarray

1.从列表或元组创建:

2.使用内置函数创建:

2. ndarray属性

3. 数组运算

1. 基本运算

2. 数学函数

3.统计函数

4. 数组索引与切片

1. 一维数组索引与切片

 2.多维数组索引与切片

5. 数组形状操作

1. 改变数组形状

 2. 数组转置

6. 数组拼接与分割

1. 数组拼接

2. 数组分割 

7. 广播机制

8. 常用函数

1. 数组生成函数

 2.数学运算函数

9. 高级运算

1. 矩阵运算

2.统计运算

10. 实践案例

1. 数据分析案例

2. 数值计算案例

11. NumPy与其他库的结合

12. NumPy高级功能

1. 线性代数

2. 随机数生成

3. FFT(快速傅里叶变换)

13. NumPy性能优化

1. 向量化操作

2. 避免不必要的复制

​编辑14. 总结

NumPy综合总结

1. 简介

2. 安装与导入

3. ndarray对象

4. 数组运算

5. 数组索引与切片

6. 数组形状操作

7. 数组拼接与分割

8. 广播机制

9. 常用函数

10. 高级运算

11. 实践案例

12. NumPy与其他库的结合

13. NumPy高级功能

14. NumPy性能优化

结论


 专栏:数学建模学习笔记

pycharm专业版免费激活教程见资源

python相关库的安装:pandas,numpy,matplotlib,statsmodels

总篇:【数学建模】—【新手小白到国奖选手】—【学习路线】

本篇属于第一卷——Numpy学习笔记

NumPy(Numerical Python)是Python编程语言的一个库,支持大规模的多维数组与矩阵运算,此外还提供了大量的数学函数库。NumPy在科学计算和数据分析领域有着广泛的应用。其核心是一个高效的多维数组对象,称为ndarray。

1. NumPy安装

要使用NumPy库,首先需要安装它。可以通过pip来安装:

pip install numpy

安装完成后,可以通过以下方式导入NumPy库:

import numpy as np

2. ndarray对象

NumPy的核心是ndarray对象,它是一个多维数组。它和Python的列表类似,但提供了更高效的存储和运算功能。

1. 创建ndarray

可以通过多种方式创建ndarray对象:

1.从列表或元组创建:

import numpy as np# 从列表创建
a = np.array([1, 2, 3])
print(a)  # 输出:[1 2 3]# 从嵌套列表创建
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b)  # 输出:
# [[1 2 3]
#  [4 5 6]]

2.使用内置函数创建:

import numpy as np# 创建全零数组
zeros_array = np.zeros((2, 3))
print(zeros_array)  # 输出:
# [[0. 0. 0.]
#  [0. 0. 0.]]# 创建全一数组
ones_array = np.ones((2, 3))
print(ones_array)  # 输出:
# [[1. 1. 1.]
#  [1. 1. 1.]]# 创建一个值为5的数组
full_array = np.full((2, 3), 5)
print(full_array)  # 输出:
# [[5 5 5]
#  [5 5 5]]# 创建单位矩阵
eye_array = np.eye(3)
print(eye_array)  # 输出:
# [[1. 0. 0.]
#  [0. 1. 0.]
#  [0. 0. 1.]]# 创建随机数组
random_array = np.random.random((2, 3))
print(random_array)  # 输出(示例):
#[[0.55827818 0.41537687 0.41252448]
# [0.10251325 0.7435904  0.69922825]]

2. ndarray属性

ndarray对象有许多属性,用于描述数组的形状、维度、数据类型等:

import numpy as npa = np.array([[1, 2, 3], [4, 5, 6]])print("数组维度:", a.ndim)  # 输出:数组维度: 2
print("数组形状:", a.shape)  # 输出:数组形状: (2, 3)
print("数组大小:", a.size)  # 输出:数组大小: 6
print("数组数据类型:", a.dtype)  # 输出:数组数据类型: int32
print("数组元素大小:", a.itemsize)  # 输出:数组元素大小: 4
print("数组数据缓冲区:", a.data)  # 输出:数组数据缓冲区: <memory at 0x000001F49D4336B0>

3. 数组运算

NumPy提供了丰富的数组运算功能,可以对ndarray对象进行数学运算、逻辑运算、统计运算等。

1. 基本运算

可以对数组进行元素级别的运算:

import numpy as npa = np.array([1, 2, 3])
b = np.array([4, 5, 6])# 加法
print(a + b)  # 输出:[5 7 9]# 减法
print(a - b)  # 输出:[-3 -3 -3]# 乘法
print(a * b)  # 输出:[ 4 10 18]# 除法
print(a / b)  # 输出:[0.25 0.4  0.5 ]

 

2. 数学函数

NumPy提供了大量的数学函数,可以对数组进行逐元素的计算:

import numpy as npa = np.array([0, np.pi / 2, np.pi])# 三角函数
print(np.sin(a))  # 输出:[0.000000e+00 1.000000e+00 1.224647e-16]
print(np.cos(a))  # 输出:[ 1.000000e+00  6.123234e-17 -1.000000e+00]
print(np.tan(a))  # 输出:[ 0.00000000e+00  1.63312394e+16 -1.22464680e-16]# 指数和对数
print(np.exp(a))  # 输出:[ 1.          4.48168907 23.14069263]
print(np.log(a))  # 输出:[-inf  0.         1.14472989](注:0的对数为负无穷)
print(np.log10(a))  # 输出:[-inf  0.          0.49714987](注:0的对数为负无穷)

 

在使用NumPy计算数组中元素的对数时,当数组中包含零元素时,会出现“divide by zero encountered in log”或“divide by zero encountered in log10”这样的警告。这是因为对数函数在零值处无定义,对数为负无穷(-inf)。

这些警告是由零值引起的,它们在对数运算中会导致无穷大的结果。这在NumPy中是一个正常的行为,提醒你注意输入数据中的零值。

如果你想避免这些警告,可以在计算对数之前,处理数组中的零值。你可以将零值替换为一个非常小的正数,例如 np.finfo(float).eps(浮点数的最小可表示正数),以避免这些警告。以下是一个示例代码:确保在替换零值之前,数组已经正确更新。

import numpy as npa = np.array([0, 1, 3])
# 替换数组中的零值为非常小的正数
a = np.where(a == 0, np.finfo(float).eps, a)print(np.log(a))    # 输出不会包含负无穷
print(np.log10(a))  # 输出不会包含负无穷

确保代码执行顺序正确,即先替换零值再计算对数。这段代码首先将数组 a 中的零值替换为 np.finfo(float).eps,然后计算 a 的自然对数和常用对数,这样就不会再出现除以零的警告了。

3.统计函数

NumPy提供了多种统计函数,可以对数组进行统计运算:

import numpy as npa = np.array([[1, 2, 3], [4, 5, 6]])# 最小值
print(np.min(a))  # 输出:1# 最大值
print(np.max(a))  # 输出:6# 和
print(np.sum(a))  # 输出:21# 均值
print(np.mean(a))  # 输出:3.5# 标准差
print(np.std(a))  # 输出:1.707825127659933# 中位数
print(np.median(a))  # 输出:3.5# 累积和
print(np.cumsum(a))  # 输出:[ 1  3  6 10 15 21]

4. 数组索引与切片

NumPy提供了强大的数组索引与切片功能,可以方便地访问和修改数组元素。

1. 一维数组索引与切片

import numpy as npa = np.array([0, 1, 2, 3, 4, 5])# 索引
print(a[0])  # 输出:0  输出第一个元素
print(a[-1])  # 输出:5  输出最后一个元素# 切片
print(a[1:3])  # 输出:[1 2]  输出第二个到第三个元素
print(a[:3])  # 输出:[0 1 2]  输出前三个元素
print(a[3:])  # 输出:[3 4 5]  输出第三个到最后一个元素
print(a[::2])  # 输出:[0 2 4]  每隔一个元素输出一个元素

 2.多维数组索引与切片

import numpy as npa = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])# 索引
print(a[0, 0])  # 输出:0  输出第一行第一列的元素
print(a[1, -1])  # 输出:5  输出第二行最后一个元素# 切片
print(a[:2, 1:3])  # 输出:
# [[1 2]
#  [4 5]]  输出第一行到第二行,第二列到第三列的元素print(a[::2, ::2])  # 输出:
# [[0 2]
#  [6 8]]  每隔一行一列输出一个元素

5. 数组形状操作

NumPy提供了多种函数来改变数组的形状。

1. 改变数组形状

import numpy as npa = np.array([[1, 2, 3], [4, 5, 6]])# 改变形状
print(a.reshape(3, 2))  # 输出:
# [[1 2]
#  [3 4]
#  [5 6]]print(a.flatten())  # 将数组展平成一维  输出:[1 2 3 4 5 6]

 2. 数组转置

import numpy as npa = np.array([[1, 2, 3], [4, 5, 6]])# 转置
print(a.T)  # 输出:
# [[1 4]
#  [2 5]
#  [3 6]]

6. 数组拼接与分割

NumPy提供了拼接与分割数组的函数。

1. 数组拼接

import numpy as npa = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])# 垂直拼接
print(np.vstack((a, b)))  # 输出:
# [[1 2]
#  [3 4]
#  [5 6]]# 水平拼接
print(np.hstack((a, b.T)))  # 输出:
# [[1 2 5]
#  [3 4 6]]

2. 数组分割 

import numpy as npa = np.array([[1, 2, 3], [4, 5, 6]])# 水平分割
print(np.hsplit(a, 3))  # 输出:[array([[1], [4]]), array([[2], [5]]), array([[3], [6]])]# 垂直分割
print(np.vsplit(a, 2))  # 输出:[array([[1, 2, 3]]), array([[4, 5, 6]])]

7. 广播机制

NumPy的广播机制允许不同形状的数组进行算术运算。广播的规则是:

  1. 如果数组的维度不同,将维度较小的数组进行扩展,直到两个数组的维度相同。
  2. 如果两个数组在某个维度上的长度不同,但其中一个长度为1,则可以进行运算。
  3. 如果两个数组在任何一个维度上的长度都不相同且都不为1,则无法进行广播。
import numpy as npa = np.array([1, 2, 3])
b = np.array([[0], [1], [2]])# 广播机制
print(a + b)  # 输出:
# [[1 2 3]
#  [2 3 4]
#  [3 4 5]]

8. 常用函数

NumPy提供了许多常用函数,以下列出一些常用函数的示例。

1. 数组生成函数

import numpy as np# 创建全零数组
print(np.zeros((2, 3)))  # 输出:
# [[0. 0. 0.]
#  [0. 0. 0.]]# 创建全一数组
print(np.ones((2, 3)))  # 输出:
# [[1. 1. 1.]
#  [1. 1. 1.]]# 创建指定值数组
print(np.full((2, 3), 5))  # 输出:
# [[5 5 5]
#  [5 5 5]]# 创建单位矩阵
print(np.eye(3))  # 输出:
# [[1. 0. 0.]
#  [0. 1. 0.]
#  [0. 0. 1.]]# 创建随机数组
print(np.random.random((2, 3)))  # 输出(示例):
# [[0.97601061 0.54150051 0.71578887]#[0.44954629 0.74204514 0.63492767]]# 创建等差数组
print(np.arange(0, 10, 2))  # 输出:[0 2 4 6 8]# 创建等比数组
print(np.linspace(0, 1, 5))  # 输出:[0.   0.25 0.5  0.75 1.  ]

 

 2.数学运算函数

import numpy as npa = np.array([1, 2, 3, 4])# 求和
print(np.sum(a))  # 输出:10# 求乘积
print(np.prod(a))  # 输出:24# 求累积和
print(np.cumsum(a))  # 输出:[ 1  3  6 10]# 求累积乘积
print(np.cumprod(a))  # 输出:[ 1  2  6 24]

9. 高级运算

1. 矩阵运算

NumPy提供了丰富的矩阵运算函数。

import numpy as npa = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])# 矩阵乘法
print(np.dot(a, b))  # 输出:
# [[19 22]
#  [43 50]]# 矩阵行列式
print(np.linalg.det(a))  # 输出:-2.0000000000000004# 矩阵逆
print(np.linalg.inv(a))  # 输出:
# [[-2.   1. ]
#  [ 1.5 -0.5]]# 矩阵特征值
print(np.linalg.eig(a))  # 输出:(特征值,特征向量)
# EigResult(eigenvalues=array([-0.37228132,  5.37228132]), #eigenvectors=array([[-0.82456484, -0.41597356],#      [ 0.56576746, -0.90937671]]))

 

2.统计运算

NumPy提供了多种统计运算函数。

import numpy as npa = np.array([[1, 2, 3], [4, 5, 6]])# 均值
print(np.mean(a))  # 输出:3.5# 中位数
print(np.median(a))  # 输出:3.5# 方差
print(np.var(a))  # 输出:2.9166666666666665# 标准差
print(np.std(a))  # 输出:1.707825127659933# 最小值
print(np.min(a))  # 输出:1# 最大值
print(np.max(a))  # 输出:6# 百分位数
print(np.percentile(a, 50))  # 输出:3.5

10. 实践案例

1. 数据分析案例

以下是一个简单的数据分析案例,展示如何使用NumPy进行数据处理和分析。

import numpy as np# 生成模拟数据
data = np.random.randn(1000)# 计算均值和标准差
mean = np.mean(data)
std_dev = np.std(data)print(f"均值: {mean}, 标准差: {std_dev}")  # 示例输出:均值: -0.015971063944354425, 标准差: 0.9670869531250885
# 计算数据的直方图
hist, bin_edges = np.histogram(data, bins=10)
print(hist)  # 示例输出:[  4   8  53 101 227 251 204 111  34   7]
print(bin_edges)  # 示例输出:[-3.42803477 -2.79654529 -2.16505581 -1.53356634 -0.90207686 -0.27058738
#  0.36090209  0.99239157  1.62388104  2.25537052  2.88686   ]

2. 数值计算案例

以下是一个简单的数值计算案例,展示如何使用NumPy进行数值计算。

import numpy as np# 定义函数
def f(x):return x**2 - 4*x + 4# 生成数据
x = np.linspace(-10, 10, 100)# 计算函数值
y = f(x)print(y)  
"""
示例输出:
[1.44000000e+02 1.39192327e+02 1.34466279e+02 1.29821855e+021.25259055e+02 1.20777880e+02 1.16378329e+02 1.12060402e+021.07824100e+02 1.03669421e+02 9.95963677e+01 9.56049383e+019.16951331e+01 8.78669524e+01 8.41203959e+01 8.04554637e+017.68721559e+01 7.33704724e+01 6.99504132e+01 6.66119784e+016.33551678e+01 6.01799816e+01 5.70864198e+01 5.40744822e+015.11441690e+01 4.82954801e+01 4.55284155e+01 4.28429752e+014.02391593e+01 3.77169677e+01 3.52764004e+01 3.29174574e+013.06401388e+01 2.84444444e+01 2.63303745e+01 2.42979288e+012.23471074e+01 2.04779104e+01 1.86903377e+01 1.69843893e+011.53600653e+01 1.38173656e+01 1.23562902e+01 1.09768391e+019.67901235e+00 8.46280992e+00 7.32823181e+00 6.27527803e+005.30394858e+00 4.41424344e+00 3.60616264e+00 2.87970615e+002.23487399e+00 1.67166616e+00 1.19008264e+00 7.90123457e-014.71788593e-01 2.35078053e-01 7.99918376e-02 6.52994592e-031.46923783e-02 1.04479135e-01 2.75890215e-01 5.28925620e-018.63585348e-01 1.27986940e+00 1.77777778e+00 2.35731048e+003.01846750e+00 3.76124885e+00 4.58565453e+00 5.49168452e+006.47933884e+00 7.54861749e+00 8.69952046e+00 9.93204775e+001.12461994e+01 1.26419753e+01 1.41193756e+01 1.56784002e+011.73190491e+01 1.90413223e+01 2.08452199e+01 2.27307418e+012.46978880e+01 2.67466585e+01 2.88770534e+01 3.10890725e+013.33827160e+01 3.57579839e+01 3.82148760e+01 4.07533925e+014.33735333e+01 4.60752984e+01 4.88586879e+01 5.17237017e+015.46703398e+01 5.76986022e+01 6.08084889e+01 6.40000000e+01]
"""

11. NumPy与其他库的结合

NumPy通常与其他库结合使用,如Pandas、Matplotlib、SciPy等。以下是一个简单的示例,展示如何结合NumPy和Matplotlib进行数据可视化。

import numpy as np
import matplotlib.pyplot as plt# 生成数据
x = np.linspace(0, 10, 100)
y = np.sin(x)# 绘制数据
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.title('Sin(x) Function')
plt.show()

运行结果: 一幅展示sin(x)函数的折线图,其中x轴表示从0到10的均匀分布的数据,y轴表示sin(x)的值。 

 

12. NumPy高级功能

1. 线性代数

NumPy提供了丰富的线性代数功能,可以进行矩阵乘法、矩阵分解、特征值计算等。

import numpy as npa = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])# 矩阵乘法
print(np.dot(a, b))  # 输出:
# [[19 22]
#  [43 50]]# 矩阵行列式
print(np.linalg.det(a))  # 输出:-2.0000000000000004# 矩阵逆
print(np.linalg.inv(a))  # 输出:
# [[-2.   1. ]
#  [ 1.5 -0.5]]# 矩阵特征值
print(np.linalg.eig(a))  # 输出:(特征值,特征向量)
# (array([-0.37228132,  5.37228132]), 
#  array([[-0.82456484, -0.41597356],
#         [ 0.56576746, -0.90937671]]))

2. 随机数生成

NumPy提供了丰富的随机数生成功能,可以生成各种分布的随机数。

import numpy as np# 生成均匀分布的随机数
print(np.random.rand(2, 3))  # 输出(示例):
# [[0.2177449  0.71579651 0.40282945]
#  [0.00823481 0.2378211  0.22714768]]# 生成标准正态分布的随机数
print(np.random.randn(2, 3))  # 输出(示例):
# [[-0.02638322 -0.29821612 -0.57163728]
#  [ 0.023793   -0.03624107  0.5007041 ]]# 生成指定区间的随机整数
print(np.random.randint(0, 10, size=(2, 3)))  # 输出(示例):
# [[9 0 6]
#  [4 5 5]]
# 生成指定分布的随机数
print(np.random.normal(loc=0, scale=1, size=(2, 3)))  # 输出(示例):
#[[-0.05426652  0.00228263 -0.27759785]#[-0.47845462  2.04304079 -0.84451445]]

3. FFT(快速傅里叶变换)

NumPy提供了快速傅里叶变换功能,可以对数组进行快速傅里叶变换。

import numpy as npa = np.array([0, 1, 2, 3])# 快速傅里叶变换
print(np.fft.fft(a))  # 输出:
# [ 6.+0.j -2.+2.j -2.+0.j -2.-2.j]# 逆快速傅里叶变换
print(np.fft.ifft(a))  # 输出:
# [ 1.5+0.j -0.5+0.5j -0.5+0.j -0.5-0.5j]

13. NumPy性能优化

NumPy通过其底层实现,已经大大优化了性能,但在实际应用中仍有许多技巧可以进一步提升性能。

1. 向量化操作

尽量使用向量化操作代替显式的Python循环,以提高性能。

import numpy as npa = np.arange(1000000)# 使用向量化操作
result = a * 2
print(result[:10])  # 输出:[ 0  2  4  6  8 10 12 14 16 18]

2. 避免不必要的复制

在操作大数组时,尽量避免不必要的数组复制操作,以减少内存使用和提高性能。

import numpy as npa = np.arange(1000000)# 避免不必要的复制
b = a[:500000]
print(b[:10])  # 输出:[0 1 2 3 4 5 6 7 8 9]

14. 总结

NumPy综合总结

本文通过详细的讲解和丰富的代码示例,全面介绍了NumPy库的基础知识、常用功能和高级应用,为初学者提供了深入理解和灵活使用NumPy的指南。

1. 简介

NumPy(Numerical Python)是Python编程语言的一个库,专门用于大规模的多维数组与矩阵运算。NumPy是科学计算和数据分析的重要工具,其核心是高效的多维数组对象ndarray。

2. 安装与导入

通过pip可以轻松安装NumPy库,导入方式为 import numpy as np

3. ndarray对象

ndarray对象是NumPy的核心,可以通过列表、元组或内置函数创建。ndarray具有多种属性,如维度、形状、大小、数据类型等,方便用户对数组进行描述和操作。

4. 数组运算

NumPy提供了丰富的运算功能,包括基本运算、数学函数和统计函数。用户可以对数组进行元素级别的加减乘除运算,使用三角函数、指数和对数函数进行复杂计算,还可以进行求和、均值、标准差等统计运算。

5. 数组索引与切片

NumPy的索引与切片功能强大,可以方便地访问和修改数组元素。支持一维和多维数组的索引和切片操作,使得数据操作更加灵活。

6. 数组形状操作

NumPy提供了改变数组形状的多种函数,如reshape、flatten和转置函数,使得用户可以轻松调整数组的结构以满足不同的计算需求。

7. 数组拼接与分割

NumPy支持数组的拼接与分割操作,用户可以使用vstack和hstack进行垂直和水平拼接,使用hsplit和vsplit进行数组分割。

8. 广播机制

广播机制允许不同形状的数组进行算术运算,极大地方便了数组的操作和计算。理解广播机制的规则有助于更有效地使用NumPy进行数组运算。

9. 常用函数

NumPy提供了多种常用函数,如创建全零数组、全一数组、单位矩阵、随机数组,以及生成等差和等比数组的函数。这些函数简化了数组的生成过程。

10. 高级运算

NumPy的高级运算功能包括矩阵运算和统计运算,支持矩阵乘法、行列式、矩阵逆和特征值计算,提供了丰富的统计函数,如均值、中位数、方差和标准差等。

11. 实践案例

本文通过数据分析和数值计算的实际案例,展示了如何使用NumPy进行数据处理和分析,以及进行数值计算,帮助读者将理论知识应用于实践。

12. NumPy与其他库的结合

NumPy通常与Pandas、Matplotlib、SciPy等库结合使用。本文展示了如何结合NumPy和Matplotlib进行数据可视化,进一步扩展了NumPy的应用范围。

13. NumPy高级功能

NumPy提供了线性代数、随机数生成和快速傅里叶变换等高级功能,使得其在科学计算和工程应用中更加得心应手。

14. NumPy性能优化

通过向量化操作和避免不必要的复制,用户可以进一步优化NumPy的性能,提升代码运行效率。

结论

NumPy作为Python科学计算的基础库,提供了强大的数组处理能力和丰富的数学函数,广泛应用于数据分析、科学计算、工程应用等领域。通过本篇详细的介绍和示例,读者可以全面掌握NumPy的使用方法,并在实际项目中灵活应用,从而大幅提升计算效率和编程体验。

相关文章:

【数学建模】—【Python库】—【Numpy】—【学习】

目录 ​编辑 1. NumPy安装 2. ndarray对象 1. 创建ndarray 1.从列表或元组创建&#xff1a; 2.使用内置函数创建&#xff1a; 2. ndarray属性 3. 数组运算 1. 基本运算 2. 数学函数 3.统计函数 4. 数组索引与切片 1. 一维数组索引与切片 2.多维数组索引与切片 5.…...

C语言一些逆置算法

目录 整数逆置 数组逆置 矩阵转置 整数逆置 如7234变为4327 int Reversed(int n){int x,reversed_n0;while(n!0){xn%10; reversed_nreversed_n*10x;nn/10;}return reversed_n; }数组逆置 将数组{1,2,3,4,5,6}逆置为{6,5,4,3,2,1} void Reverse(int a[],int l,int r){w…...

CentOS7安装MongoDB

文章目录 一、 环境准备二、安装包下载三、 软件安装和启动3.1 将下载好的安装包上传到 Linux 服务器某个目录下&#xff0c;并使用以下命令解压压缩包。3.2 将解压后的目录移动到 /usr/local 目录下&#xff0c;并改名为 mongodb 。3.3 进入 mongo 目录&#xff0c;并创建文件…...

python笔记----少儿编程课程

第1课&#xff1a; 认识新朋友-python 知识点&#xff1a; 1、在英文状态下编写Python语句。 2、内置函数print()将结果输出到标准的控制台上&#xff0c;它的基本语法格式如下&#xff1a; print("即将输出的内容") #输出的内容要用引号引起来&#xff0c;可…...

RabbitMQ实践——搭建单人聊天服务

大纲 创建Core交换器用户登录发起聊天邀请接受邀请聊天实验过程总结代码工程 经过之前的若干节的学习&#xff0c;我们基本掌握了Rabbitmq各个组件和功能。本文我们将使用之前的知识搭建一个简单的单人聊天服务。 基本结构如下。为了避免Server有太多连线导致杂乱&#xff0c;下…...

GPT-5

欢迎来到 Papicatch的博客 文章目录 &#x1f349;技术突破预测 &#x1f348;算法进步 &#x1f348;理解力提升 &#x1f348;行业推动力 &#x1f349;人机协作的未来 &#x1f348;辅助决策 &#x1f348;增强创造力 &#x1f348;复杂任务中的角色 &#x1f348;人…...

Vip-智能预估+大数据标签+人群全选=用户分群!

Mobpush用户分群功能升级&#xff0c;创建推送入口vip用户可进入自有选择标签创建“用户分群”&#xff0c;相比于免费标签&#xff0c;“用户标签”维度更丰富。在应用基础属性上&#xff0c;增加“品牌”、“网络状态”、“运营商”&#xff0c;众所周知&#xff0c;不同厂商…...

SpringBoot异常处理机制之自定义404、500错误提示页面 - 518篇

历史文章&#xff08;文章累计500&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…...

为什么选择Xinstall CPA结算系统?因为它能帮您解决这些痛点!

在App推广和运营的道路上&#xff0c;我们时常面临着各种挑战和痛点。其中&#xff0c;结算系统的复杂性和不透明性往往成为制约我们发展的瓶颈。然而&#xff0c;有了Xinstall CPA结算系统&#xff0c;这些问题将迎刃而解&#xff0c;让您的App推广之路更加顺畅和高效。 一、…...

2024年【建筑电工(建筑特殊工种)】模拟试题及建筑电工(建筑特殊工种)作业考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年建筑电工(建筑特殊工种)模拟试题为正在备考建筑电工(建筑特殊工种)操作证的学员准备的理论考试专题&#xff0c;每个月更新的建筑电工(建筑特殊工种)作业考试题库祝您顺利通过建筑电工(建筑特殊工种)考试。 1、…...

解锁数字化转型的双引擎:MSP和CMP的力量

随着企业数字化转型的深入&#xff0c;云计算已经成为现代企业IT基础设施的重要组成部分。为了高效地管理和优化多云环境&#xff0c;企业通常会依赖管理服务提供商 (Managed Service Providers, MSP) 和云管理平台 (Cloud Management Platforms, CMP)。本文将探讨MSP和CMP的定…...

Pyecharts入门

数据可视化 Pyecharts简介 Apache ECharts 是一个由百度开源的数据可视化&#xff0c;凭借着良好的交互性&#xff0c;精巧的图表设计&#xff0c;得到了众多开发者的认可。而 Python 是一门富有表达力的语言&#xff0c;很适合用于数据处理。当数据分析遇上数据可视化时&#…...

Socket编程详解(一)服务端与客户端的双向对话

目录 预备知识 视频教程 项目前准备知识点 1、服务器端程序的编写步骤 2、客户端程序编写步骤 代码部分 1、服务端FrmServer.cs文件 2、客户端FrmClient.cs文件 3、启动文件Program.cs 结果展示 预备知识 请查阅博客http://t.csdnimg.cn/jE4Tp 视频教程 链接&#…...

使用Python实现深度学习模型:强化学习与深度Q网络(DQN)

深度Q网络(Deep Q-Network,DQN)是结合深度学习与强化学习的一种方法,用于解决复杂的决策问题。本文将详细介绍如何使用Python实现DQN,主要包括以下几个方面: 强化学习简介DQN算法简介环境搭建DQN模型实现模型训练与评估1. 强化学习简介 强化学习是一种训练智能体(agent…...

Py-Spy、Scalene 和 VizTracer 的对比分析

在前几篇文章中&#xff0c;我们详细介绍了如何使用 py-spy、scalene 和 viztracer 进行性能分析和优化。今天&#xff0c;我们将对这三个性能分析工具进行详细对比&#xff0c;帮助你选择最适合你的工具。 工具简介 Py-Spy&#xff1a; 实时性能分析&#xff1a;Py-Spy 可以…...

软考架构师考试内容

软考系统架构设计师考试是中国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;中的一项高级资格考试&#xff0c;旨在评估考生是否具备系统架构设计的能力。根据提供的参考资料&#xff0c;考试内容主要包括以下几个方面&#…...

【MySQL基础篇】概述及SQL指令:DDL及DML

数据库是一个按照数据结构来组织、存储和管理数据的仓库。以下是对数据库概念的详细解释&#xff1a;定义与基本概念&#xff1a; 数据库是长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 数据库不仅仅是数据的简单堆积&#xff0c;而是遵循一定的规则…...

计算机网络 —— 网络字节序

网络字节序 1、网络字节序 (Network Byte Order)和本机转换 1、大端、小端字节序 “大端” 和” 小端” 表示多字节值的哪一端存储在该值的起始地址处&#xff1b;小端存储在起始地址处&#xff0c;即是小端字节序&#xff1b;大端存储在起始地址处&#xff0c;即是大端字节…...

区块链不可能三角

区块链不可能三角&#xff1a;探索去中心化、安全与可扩展性的权衡 引言 区块链技术自诞生以来&#xff0c;以其去中心化、透明、安全等特点吸引了全球的关注&#xff0c;成为金融科技领域的重要革新力量。然而&#xff0c;随着区块链应用的日益广泛&#xff0c;一个核心问题…...

新手第一个漏洞复现:MS17-010(永恒之蓝)

文章目录 漏洞原理漏洞影响范围复现环境复现步骤 漏洞原理 漏洞出现在Windows SMB v1中的内核态函数srv!SrvOs2FeaListToNt在处理FEA&#xff08;File Extended Attributes&#xff09;转换时。该函数在将FEA list转换成NTFEA&#xff08;Windows NT FEA&#xff09;list前&am…...

代码随想录Day64

98.所有可达路径 题目&#xff1a;98. 所有可达路径 (kamacoder.com) 思路&#xff1a;果断放弃 答案 import java.util.*;public class Main {private static List<List<Integer>> adjList;private static List<List<Integer>> allPaths;private sta…...

Angular 指令

Angular 指令是 Angular 框架中的一项核心功能&#xff0c;它允许开发人员扩展 HTML 的功能&#xff0c;并创建可复用的组件和行为。以下是一些常见的 Angular 指令&#xff1a; 1. 组件指令 (Component Directives) 组件指令是最常用的一种指令&#xff0c;用于创建可复用的 U…...

移动端 UI 风格,书写华丽篇章

移动端 UI 风格&#xff0c;书写华丽篇章...

flutter开发实战-ListWheelScrollView与自定义TimePicker时间选择器

flutter开发实战-ListWheelScrollView与自定义TimePicker 最近在使用时间选择器的时候&#xff0c;需要自定义一个TimePicker效果&#xff0c;当然这里就使用了ListWheelScrollView。ListWheelScrollView与ListView类似&#xff0c;但ListWheelScrollView渲染效果类似滚筒效果…...

stable diffusion 模型和lora融合

炜哥的AI学习笔记——SuperMerger插件学习 - 哔哩哔哩接下来学习的插件名字叫做 SuperMerger,它的作用正如其名,可以融合大模型或者 LoRA,一般来说会结合之前的插件 LoRA Block Weight 使用,在调整完成 LoRA 模型的权重后使用改插件进行重新打包。除了 LoRA ,Checkpoint 也…...

Spring Boot中的分布式缓存方案

Spring Boot中的分布式缓存方案 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨在Spring Boot应用中实现分布式缓存的方案&#xff0c;以提升系统…...

AI写作革命:如何用AI工具轻松搞定700+学科的论文?

不知道大家有没有发现&#xff0c;随着人工智能技术的快速发展&#xff0c;AI工具正逐渐渗透到我们日常生活的各个方面&#xff0c;极大地提高了我们的工作和学习效率。无论是AI写作、AI绘画、AI思维导图&#xff0c;还是AI幻灯片制作&#xff0c;这些工具已成为我们不可或缺的…...

v-for中key的原理以及用法

在 Vue.js 中&#xff0c;v-for 指令用于基于源数据多次渲染元素或模板块。当使用 v-for 渲染列表时&#xff0c;为每个列表项提供一个唯一的 key 属性是非常重要的。key 的主要作用是帮助 Vue 跟踪每个节点的身份&#xff0c;从而重用和重新排序现有元素。 先来张原理图&#…...

基于强化学习的目标跟踪论文合集

文章目录 2020UAV Maneuvering Target Tracking in Uncertain Environments Based on Deep Reinforcement Learning and Meta-LearningUAV Target Tracking in Urban Environments Using Deep Reinforcement Learning 2021Research on Vehicle Dispatch Problem Based on Kuhn-…...

高质量AIGC/ChatGPT/大模型资料分享

2023年要说科技圈什么最火爆&#xff0c;一定是ChatGPT、AIGC&#xff08;人工智能生成内容&#xff09;和大型语言模型。这些技术前沿如同科技世界的新潮流&#xff0c;巨浪拍岸&#xff0c;引发各界关注。ChatGPT的互动性和逼真度让人们瞠目&#xff0c;它能与用户展开流畅对…...

使用Python进行Socket接口测试

大家好&#xff0c;在现代软件开发中&#xff0c;网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯&#xff0c;都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中&#xff0c;Socket&#xff08;套接字&#xff09;技术扮演了重要角色…...

C++编程逻辑讲解step by step:存折和信用卡类。

题目 存折和信用卡类&#xff0c;信用卡是一种存折&#xff0c;可以透支&#xff0c;可以存款。 代码 #include<iostream> #include<string> using namespace std; class passbook {public: passbook(string nam,int n,float m) {namenam; numn; balancem; } vo…...

为什么说BIM在机电安装行业是刚需?3D开发工具HOOPS如何促进BIM发展?

在建筑行业中&#xff0c;机电安装是一个复杂且精细的工程领域&#xff0c;它涉及到电气、管道、通风和控制系统等多个方面。随着建筑项目规模的不断扩大和复杂性的增加&#xff0c;传统的二维设计方法已经难以满足现代建筑的需求。正是在这种背景下&#xff0c;BIM技术应运而生…...

SQLite:一个极简使用教程

SQLite是一个轻量级的、文件系统基础的数据库&#xff0c;它被设计为配置简单、易于部署。SQLite数据库存储在一个单一的磁盘文件中&#xff0c;这意味着数据库的创建和维护都非常简单。 1. SQLite特点 轻量级&#xff1a;SQLite不需要一个独立的服务器进程。它是一个嵌入式SQ…...

酒水公司网站品牌建设宣传如何进行

红酒、白酒、啤酒、米酒、精酿啤酒等各种各样的酒水类型和从业公司数量比较多&#xff0c;部分品牌有收藏价值/价格高但销量相对较低&#xff0c;也有部分属于亲民&#xff0c;价格低但销量高&#xff0c;国内外受众广&#xff0c;人员标签不同生意拓展面自然也不同。 无论如何…...

【高级篇】InnoDB引擎深入:核心机制与实战优化(十五)

引言 在探索了MySQL集群与分布式技术之后,我们进入了数据库引擎的核心地带——InnoDB。作为MySQL的默认存储引擎,InnoDB凭借其对事务的支持、行级锁定、高效的恢复机制以及复杂的内存管理,成为众多应用场景的首选。本章,我们将深入InnoDB的内部机制,透彻理解锁管理、事务…...

打造安全的Linux环境:关键配置指南

打造安全的Linux环境&#xff1a;关键配置指南 Linux作为一款开源的操作系统&#xff0c;因其稳定性、灵活性和安全性而受到广泛欢迎。然而&#xff0c;即使Linux系统本身设计得相对安全&#xff0c;不正确的配置或管理不善也可能导致安全风险。本文将指导你如何通过关键配置来…...

什么是WABF验证?

今年的618电商购物节已经落下帷幕&#xff0c;在此期间&#xff0c;各大电商平台都普遍迎来了用户访问量、优惠券领取量和交易量的显著增长。在这一时期&#xff0c;业务安全成为电商平台关注的焦点。验证码作为一种常见的业务安全工具&#xff0c;能够有效应对业务安全问题。然…...

CSS3 分页

CSS3 分页 分页是网页设计中常见的一种布局方式&#xff0c;它允许将内容分布在多个页面中&#xff0c;从而提高用户体验和网站的可管理性。CSS3 提供了多种灵活的方式来设计分页&#xff0c;使得开发者能够创建既美观又实用的分页导航。本文将详细介绍如何使用 CSS3 来创建和…...

QWebChannel实现与JS的交互

QWebChannel实现与JS的交互 在利用Qt框架的QWebEngineView进行嵌入浏览器开发时&#xff0c;可以很方便的通过 QWebChannel实现与js的交互&#xff0c;本节内容简单讲解js与Qt应用程序相互发送消息。 最近做项目遇到了这个问题&#xff0c;发现网上的例子不全&#xff0c;很多…...

【漏洞复现】电信网关配置管理系统——命令执行

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 电信网关配置管理系统是一个用于管理和配置电信网关设备的软件系…...

排序算法。

快速排序&#xff1a;QuickSort 选标准值&#xff0c;将比标准值小的放在其左侧&#xff0c;将比标准值大的放在其右侧&#xff0c;左右两部分分别重复以上操作 1.挖坑填补法 拆东墙补西墙 先把第一个数拿出来用temp储存 然后从最后面遍历 找到比temp小的放到第一个位置 然后…...

告别 “屎山” 代码,务必掌握这14 个 SpringBoot 优化小妙招

插&#xff1a; AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家(前言 – 人工智能教程 ) 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家…...

测量无人船作业流程是怎样的?

在一些特殊水域测量作业中&#xff0c;使用有人船进行测量时受阻较多&#xff0c;而采用无人测量船则效率就非常高了&#xff0c;它是解决复杂水域测量问题最直接最有效的方式。那么&#xff0c;测量无人船作业流程是怎样的&#xff1f;下面就让小编来为大家简单介绍一下&#…...

四川赤橙宏海商务信息咨询有限公司抖音开店靠谱吗?

在数字化浪潮席卷全球的今天&#xff0c;电商行业正以前所未有的速度发展。而在这个大潮中&#xff0c;四川赤橙宏海商务信息咨询有限公司凭借其专业的团队和前瞻性的战略眼光&#xff0c;专注于抖音电商服务&#xff0c;为广大商家提供了一站式解决方案&#xff0c;成为了行业…...

解决ssh: connect to host IP port 22: Connection timed out报错(scp传文件指定端口)

错误消息 ssh: connect to host IP port 22: Connection timed out 指出 SSH 客户端尝试连接到指定的 IP 地址和端口号&#xff08;默认 SSH 端口是 22&#xff09;&#xff0c;但是连接超时了。这意味着客户端没有在预定时间内收到来自服务器的响应。 可能的原因 SSH 服务未…...

【笔记】echarts图表的缩放和鼠标滚动冲突的处理解决方案

解决方案不是很好&#xff0c;来源于github的issue&#xff0c;官方提供了&#xff0c;组合键触发缩放的功能。 https://github.com/apache/echarts/issues/5769 https://echarts.apache.org/zh/option.html#dataZoom-inside.zoomOnMouseWheel dataZoom-inside.zoomOnMouseWhe…...

代码随想录训练营Day51

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、不同的子序列二、两个字符串的删除操作三、编辑距离 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 今天是跟着代码随想录刷题的第…...

C#上位机与PLC

在工业自动化的舞台上&#xff0c;C#上位机与PLC之间的通信是一曲精妙绝伦的交响乐。今天&#xff0c;我们将一起揭开C#上位机与PLC通信的三种神秘实现方法&#xff0c;探索它们如何共同谱写出高效、稳定、灵活的工业自动化乐章。 序幕&#xff1a;通信的“前奏” 在深入了解…...

CVE-2018-8120漏洞提权:Windows 7的安全剖析与实战应用

CVE-2018-8120漏洞提权&#xff1a;Windows 7的安全剖析与实战应用 在网络安全的世界里&#xff0c;漏洞利用常常是攻击者用来获取系统控制权的捷径。2018年发现的CVE-2018-8120漏洞&#xff0c;针对Windows 7操作系统&#xff0c;提供了一个这样的途径。本文将深入分析这一漏…...