【Python】数据处理:NumPy

NumPy是一个用于科学计算的开源Python库,其名称来源于“Numerical Python”的缩写。它提供了支持大规模多维数组和矩阵运算的功能,此外还包含了大量的数学函数库,可以高效地进行各种数学操作。

import numpy as np

数组创建、属性和操作

数组的创建

可以通过不同的方式向 np.array() 函数传入参数来构建数组。这些参数可以是 Python 列表、元组、其他数组、生成器表达式等,以及一些特定的构造函数。

arr1 = np.array([1, 2, 3, 4, 5])  # 使用 Python 列表创建数组
print("列表创建的数组:",arr1)arr2 = np.array((1, 2, 3, 4, 5))  # 使用 Python 元组创建数组
print("元组创建的数组:",arr2)arr3 = np.array(x**2 for x in range(5))  # 使用生成器表达式创建数组
print("生成器表达式创建的数组:",arr3)existing_array = np.array([10, 20, 30])
arr4 = np.array(existing_array)  # 使用其他数组创建数组
print("使用其他数组创建的数组:",arr4)

NumPy提供了许多创建特殊数组的函数,例如:

zeros = np.zeros((3, 3))
print("全零数组:\n", zeros)
ones = np.ones((2, 4))
print("全一数组:\n", ones)
identity = np.eye(3)
print("单位矩阵(对角线为1的方阵):\n", identity)
arange_seq = np.arange(0, 20, 5)
print("等差序列:", arange_seq)  # 输出: [ 0  5 10 15]
linspace_seq = np.linspace(0, 1, 5)
print("等间隔序列:", linspace_seq)  # 输出: [0.   0.25 0.5  0.75 1.  ]

数组的属性

array = np.array([[1, 2, 3], [4, 5, 6]])# 创建一个示例数组
print("数组的维度数 (ndim):", array.ndim)  # 输出: 2
print("数组的形状 (shape):", array.shape)  # 输出: (2, 3)
print("数组的元素总数 (size):", array.size)  # 输出: 6
print("数组的元素数据类型 (dtype):", array.dtype)  # 输出: int64
print("数组中每个元素的字节大小 (itemsize):", array.itemsize)  # 输出: 8
print("数组中所有元素所占的总字节数 (nbytes):", array.nbytes)  # 输出: 48
print("数组的转置 (T):\n", array.T)  # 输出: [[1 4][2 5][3 6]]

数组的索引

基本索引:用于访问单个元素,语法类似于Python列表

a[0]   # 访问第一个元素
b[2, 1]   # 访问二维数组中的特定元素

切片索引:用于访问子数组,语法为 start:stop:step

a[1:4]   # 访问从第1到第3个元素
b[:, 1]   # 访问二维数组的第二列

布尔索引:使用布尔数组来选择符合条件的元素。

mask = a > 30
a[mask]   # 访问大于30的元素

花式索引:使用整数数组来访问特定元素。

indices = [0, 2, 4]
a[indices]   # 访问特定索引的元素
b[[0, 2], [1, 2]]   # 访问二维数组中特定位置的元素

混合索引:结合多种索引方法进行复杂操作。

c[1:3, [2, 4]]   # 切片和花式索引混合使用

元素的修改

基本索引修改:直接通过索引修改单个元素。

a = np.array([1, 2, 3, 4, 5])
a[0] = 10  # 修改第一个元素
print(a)  # 输出: [10  2  3  4  5]

切片修改:通过切片一次性修改多个元素。

a[1:4] = [20, 30, 40]  # 修改多个元素
print(a)  # 输出: [10 20 30 40  5]

布尔索引修改:使用布尔索引修改符合条件的元素。

a[a > 25] = 100  # 修改大于25的元素
print(a)  # 输出: [10 20 100 100  5]

花式索引修改:通过花式索引修改特定位置的元素。

indices = [0, 2]
a[indices] = [50, 60]  # 修改特定索引的元素
print(a)  # 输出: [50 20 60 100  5]

数组的维度操作

数组的变形

reshape:改变数组形状,不改变数据。

b = np.arange(6).reshape(2, 3)
print(b)# 输出:[[0 1 2][3 4 5]]

resize:改变数组形状,可能改变数据(原地修改)。

b.resize((3, 2))
print(b)# 输出:[[0 1][2 3][4 5]]

flatten:将多维数组展平成一维数组。

c = b.flatten()
print(c)  # 输出: [0 1 2 3 4 5]

ravel:类似于flatten,但返回的是视图(如果可能)。

d = b.ravel()
print(d)  # 输出: [0 1 2 3 4 5]

newaxis:增加一个维度。

e = a[:, np.newaxis]
print(e)
# 输出:[[50][20][60][100][5]]

squeeze:删除单维度条目。

f = e.squeeze()
print(f)  # 输出: [50 20 60 100  5]

数组的转换

newaxis:增加一个维度。

e = a[:, np.newaxis]
print(e)
# 输出:[[0][1][2][3][4][5]]

squeeze:删除单维度条目。

f = e.squeeze()
print(f)  # 输出: [0 1 2 3 4 5]

transpose:转置数组。

g = np.array([[1, 2, 3], [4, 5, 6]])
h = g.transpose()
print(h)  # 输出:[[1 4][2 5][3 6]]

swapaxes:交换数组的两个轴。

python复制代码i = np.swapaxes(g, 0, 1)
print(i)  # 输出:[[1 4][2 5][3 6]]

T:快速访问转置。

j = g.T
print(j)  #输出:[[1 4][2 5][3 6]]

数组的拼接

水平拼接是将多个数组沿着水平方向(列方向)合并成一个新的数组。使用 np.hstack() 函数可以实现水平拼接。

arr1 = np.array([[1, 2, 3],[4, 5, 6]])
arr2 = np.array([[7, 8, 9],[10, 11, 12]])
result = np.hstack((arr1, arr2))  # 水平拼接数组
#[[ 1  2  3  7  8  9]
# [ 4  5  6 10 11 12]]

垂直拼接是将多个数组沿着垂直方向(行方向)合并成一个新的数组。使用 np.vstack() 函数可以实现垂直拼接。

arr1 = np.array([[1, 2, 3],[4, 5, 6]])
arr2 = np.array([[7, 8, 9],[10, 11, 12]])
result = np.vstack((arr1, arr2))  # 垂直拼接数组
#[[ 1  2  3]
# [ 4  5  6]
# [ 7  8  9]
# [10 11 12]]

数组的拆分

使用 np.hsplit() 函数可以沿着水平方向(列方向)拆分数组。

arr = np.array([[1, 2, 3, 4],[5, 6, 7, 8]])
result = np.hsplit(arr, 2)  # 水平拆分数组
#[array([[1, 2],
#        [5, 6]]),
# array([[3, 4],
#        [7, 8]])]

使用 np.vsplit() 函数可以沿着垂直方向(行方向)拆分数组。

arr = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
# 垂直拆分数组
result = np.vsplit(arr, 3)
#[array([[1, 2, 3]]),
# array([[4, 5, 6]]),
# array([[7, 8, 9]])]

数组的数据类型

指定数据类型

在创建数组时,可以通过指定 dtype 参数来指定数组的数据类型。常见的数据类型包括整数、浮点数和复数等。例如:

arr_int = np.array([1, 2, 3, 4], dtype=np.int32)
print("整数类型数组:")
print(arr_int)
# 创建浮点数类型的数组
arr_float = np.array([1.0, 2.5, 3.7], dtype=np.float64)
print("浮点数类型数组:")
print(arr_float)

查看和改变数据类型

使用数组的 dtype 属性可以查看数组的数据类型,通过 astype() 方法可以改变数组的数据类型。例如:

python复制代码import numpy as nparr = np.array([1, 2, 3])# 查看数组的数据类型
print("数组的数据类型:", arr.dtype)# 改变数组的数据类型为浮点数
arr_float = arr.astype(np.float64)
print("改变后的数据类型:", arr_float.dtype)

常见数据类型

以下是 NumPy 中常见的数据类型及其对应的类型字符:

数据类型类型字符描述
bool?布尔型数据类型,存储 True 或 False。
int8i18 位整数类型(-128 到 127)。
int16i216 位整数类型(-32768 到 32767)。
int32i432 位整数类型(-2^31 到 2^31-1)。
int64i864 位整数类型(-2^63 到 2^63-1)。
uint8u1无符号 8 位整数类型(0 到 255)。
uint16u2无符号 16 位整数类型(0 到 65535)。
uint32u4无符号 32 位整数类型(0 到 2^32-1)。
uint64u8无符号 64 位整数类型(0 到 2^64-1)。
float16f2半精度浮点数类型。
float32f4单精度浮点数类型。
float64 or floatf8双精度浮点数类型。
float128f16扩展精度浮点数类型。
complex64c8复数,使用两个 32 位浮点数表示实部和虚部。
complex128 or complexc16复数,使用两个 64 位浮点数表示实部和虚部。
complex256c32复数,使用两个 128 位浮点数表示实部和虚部。
objectOPython 对象类型,可以包含任意 Python 对象。
string_S固定长度的 ASCII 字符串类型。例如 S10 表示长度为 10 的字符串。
unicode_U固定长度的 Unicode 类型。例如 U10 表示长度为 10 的 Unicode 字符串。

数组的运算、通用函数

简单运算

加法、减法、乘法和除法

# 创建两个示例数组
a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])
c = a + b  # 加法
print("加法结果:", c)  # 输出: [ 6  8 10 12]
d = a - b  # 减法
print("减法结果:", d)  # 输出: [-4 -4 -4 -4]
e = a * b  # 乘法
print("乘法结果:", e)  # 输出: [ 5 12 21 32]
f = b / a  # 除法
print("除法结果:", f)  # 输出: [5.  3.  2.33333333  2.]

指数和对数运算

# 创建一个示例数组
g = np.array([1, 2, 3, 4])
h = np.exp(g)  # 指数运算
print("指数运算结果:", h)  # 输出: [ 2.71828183  7.3890561  20.08553692 54.59815003]
i = np.log(g)  # 对数运算
print("对数运算结果:", i)  # 输出: [0.         0.69314718 1.09861229 1.38629436]

三角函数运算

# 创建一个示例数组
j = np.array([0, np.pi/2, np.pi])
k = np.sin(j)  # 正弦函数
print("正弦函数结果:", k)  # 输出: [0.0000000e+00 1.0000000e+00 1.2246468e-16]
l = np.cos(j)  # 余弦函数
print("余弦函数结果:", l)  # 输出: [ 1.000000e+00  6.123234e-17 -1.000000e+00]
m = np.tan(j)  # 正切函数
print("正切函数结果:", m)  # 输出: [ 0.00000000e+00  1.63312394e+16 -1.22464680e-16]

比较运算

比较运算符

# 创建两个示例数组
a = np.array([1, 2, 3, 4])
b = np.array([5, 2, 7, 1])
c = a == b  # 等于
print("等于运算结果:", c)  # 输出: [False  True False False]
d = a != b  # 不等于
print("不等于运算结果:", d)  # 输出: [ True False  True  True]
e = a > b  # 大于
print("大于运算结果:", e)  # 输出: [False False False  True]
f = a <= b  # 小于等于
print("小于等于运算结果:", f)  # 输出: [ True  True  True False]

逻辑运算

g = np.logical_and(a > 2, b < 5)  # 逻辑与
print("逻辑与运算结果:", g)  # 输出: [False False  True False]
h = np.logical_or(a < 2, b > 5)  # 逻辑或
print("逻辑或运算结果:", h)  # 输出: [ True False  True  True]
i = np.logical_not(a == b)  # 逻辑非
print("逻辑非运算结果:", i)  # 输出: [ True False  True  True]

通用函数

基本数学运算

# 创建示例数组
a = np.array([1, 2, 3, 4])
b = np.add(a, 2)  # 加法
print("加法:", b)  # 输出: [3 4 5 6]
c = np.multiply(a, 3)  # 乘法
print("乘法:", c)  # 输出: [ 3  6  9 12]
d = np.exp(a)  # 指数函数
print("指数函数:", d)  # 输出: [ 2.71828183  7.3890561  20.08553692 54.59815003]

聚合函数

sum_a = np.sum(a)  # 求和
print("数组求和:", sum_a)  # 输出: 10
mean_a = np.mean(a)  # 求平均值
print("数组平均值:", mean_a)  # 输出: 2.5
std_a = np.std(a)  # 求标准差
print("数组标准差:", std_a)  # 输出: 1.118033988749895

比较运算

x = np.array([1, 2, 3])
y = np.array([2, 2, 2])
result = np.greater(x, y)  # 返回布尔数组
print("大于运算:", result)  # 输出: [False False  True]

这些ufunc函数在处理NumPy数组时非常高效,能够简化代码并且利用NumPy的向量化操作进行快速计算。使用这些函数可以有效地进行数学运算、逻辑运算以及对数组元素的操作,是NumPy强大功能的重要组成部分。

函数名描述示例
np.add元素级别的加法np.add([1, 2], [3, 4]) 返回 [4, 6]
np.subtract元素级别的减法np.subtract([1, 2], [3, 4]) 返回 [-2, -2]
np.multiply元素级别的乘法np.multiply([1, 2], [3, 4]) 返回 [3, 8]
np.divide元素级别的除法np.divide([1, 2], [3, 4]) 返回 [0.333, 0.5]
np.power元素级别的幂运算np.power([1, 2], [3, 4]) 返回 [1, 16]
np.exp元素级别的指数函数np.exp([1, 2]) 返回 [2.718, 7.389]
np.log, np.log10, np.log2元素级别的对数函数np.log([1, np.e]) 返回 [0, 1]
np.sin, np.cos, np.tan元素级别的三角函数np.sin([0, np.pi/2]) 返回 [0, 1]
np.arcsin, np.arccos, np.arctan元素级别的反三角函数np.arcsin([0, 1]) 返回 [0, 1.570]
np.sqrt元素级别的平方根np.sqrt([1, 4]) 返回 [1, 2]
np.abs元素级别的绝对值np.abs([-1, -2]) 返回 [1, 2]
np.ceil, np.floor元素级别的向上取整和向下取整np.ceil([1.1, 2.9]) 返回 [2, 3]
np.rint元素级别的四舍五入np.rint([1.1, 2.5]) 返回 [1, 3]
np.sign元素级别的符号函数np.sign([-1, 2]) 返回 [-1, 1]
np.maximum, np.minimum元素级别的最大值和最小值np.maximum([1, 2], [2, 1]) 返回 [2, 2]
np.logical_not元素级别的逻辑非np.logical_not([True, False]) 返回 [False, True]
np.logical_and, np.logical_or, np.logical_xor元素级别的逻辑运算np.logical_and([True, False], [True, True]) 返回 [True, False]
np.bitwise_and, np.bitwise_or, np.bitwise_xor元素级别的位运算np.bitwise_and([1, 0], [1, 1]) 返回 [1, 0]
np.isnan, np.isinf元素级别的判断是否为NaN或无穷大np.isnan([np.nan, 1]) 返回 [True, False]
np.isfinite元素级别的判断是否为有限数np.isfinite([np.inf, 1]) 返回 [False, True]

广播运算

广播的规则

NumPy的广播规则定义了在进行元素级别操作时,如何处理不同形状的数组。当进行运算时,NumPy会比较两个数组的形状,然后尝试在较小的数组上“广播”操作,使得它们的形状能够对齐。

广播规则如下:

  1. 维度不足的数组在其缺失的维度上进行扩展
    • 将其形状用1填充,直到两个数组的形状能够对齐。
  2. 对于每对对应维度,数组形状要么相等,要么其中一个为1
    • 如果两个数组的形状在某个维度上相等,或者其中一个数组在该维度上的长度为1,则认为它们是兼容的。
  3. 广播之后,每个数组的维度等于两个输入数组中的最大维数

广播的示例

广播的基本操作

在这个例子中,标量 b 被扩展成了形状为 (3,) 的数组 [2, 2, 2],然后与数组 a 进行元素级别的加法运算。

a = np.array([1, 2, 3])  # 形状为 (3,)
b = 2  # 标量,形状为 ()
# 对数组 a 和标量 b 进行加法运算,b 被广播为 [2, 2, 2]
c = a + b
print(c)  # 输出: [3 4 5]

更复杂的广播示例

在这个例子中,数组 B 被扩展成了形状为 (2, 3) 的数组 [[10, 20, 30], [10, 20, 30]],然后与数组 A 进行元素级别的加法运算。

A = np.array([[1, 2, 3], [4, 5, 6]])  # 形状为 (2, 3)
B = np.array([10, 20, 30])  # 形状为 (3,)
# 对数组 A 和 B 进行加法运算,B 被广播为 [[10, 20, 30], [10, 20, 30]]
C = A + B
print(C)  # 输出:[[11 22 33][14 25 36]]

随机模块

下表总结了NumPy中的numpy.random模块的主要功能、常用参数以及返回值:

函数功能与描述常用参数返回值
numpy.random.rand生成指定形状的随机数数组,范围在[0, 1)之间。形状 (size)随机数组
numpy.random.randn生成指定形状的标准正态分布随机数数组。形状 (size)随机数组
numpy.random.randint生成指定范围内的整数随机数数组。最小值 (low), 最大值 (high, 不包括在内), 形状 (size)随机整数数组
numpy.random.random_sample生成指定形状的随机数数组,范围在[0, 1)之间。形状 (size)随机数组
numpy.random.random生成指定形状的随机数数组,范围在[0, 1)之间。形状 (size)随机数组
numpy.random.choice从给定的一维数组中随机抽取元素。数组 (a), 抽样个数 (size, 可选), 替换与否 (replace, 可选), 概率 (p, 可选)抽样结果数组
numpy.random.shuffle随机打乱给定的数组。数组 (x)无,原地打乱数组
numpy.random.permutation返回随机排列给定数组的副本。数组 (x)打乱后的数组副本
numpy.random.seed设定随机数生成器的种子,以便复现随机数序列。种子值 (seed)无,设定随机数种子
numpy.random.normal生成指定形状的正态分布随机数数组。均值 (loc), 标准差 (scale), 形状 (size)随机数组
numpy.random.uniform生成指定形状的均匀分布随机数数组。最小值 (low), 最大值 (high), 形状 (size)随机数组
numpy.random.exponential生成指定形状的指数分布随机数数组。每单位时间的事件率 (scale), 形状 (size)随机数组
numpy.random.poisson生成指定形状的泊松分布随机数数组。预期的事件发生率 (lam), 形状 (size)随机数组
numpy.random.gamma生成指定形状的伽马分布随机数数组。形状参数 (shape), 尺度参数 (scale, 可选), 形状 (size)随机数组
numpy.random.beta生成指定形状的贝塔分布随机数数组。形状参数 (a), 形状参数 (b), 形状 (size)随机数组
numpy.random.chisquare生成指定形状的卡方分布随机数数组。自由度 (df), 形状 (size)随机数组
numpy.random.binomial生成指定形状的二项分布随机数数组。试验次数 (n), 成功概率 (p), 形状 (size)随机数组
numpy.random.multivariate_normal生成指定形状的多变量正态分布随机数数组。均值向量 (mean), 协方差矩阵 (cov), 形状 (size)多维随机数组
numpy.random.standard_normal生成指定形状的标准正态分布随机数数组。形状 (size)随机数组
numpy.random.standard_t生成指定形状的学生 t 分布随机数数组。自由度 (df), 形状 (size)随机数组

文件存取操作

文本文件存取操作

从文本文件读取数据 (np.loadtxt)

# 从文本文件读取数据
data = np.loadtxt('data.txt', delimiter=',')  # 可以指定分隔符,默认是空白符
print("从文本文件读取的数据:")
print(data)
  • 参数解释:
    • 'data.txt' 是要读取的文件名。
    • delimiter=',' 指定了数据之间的分隔符,这里假设是逗号分隔。

将数据保存到文本文件 (np.savetxt)

data = np.array([[1, 2, 3],[4, 5, 6]])
# 将数据保存到文本文件
np.savetxt('saved_data.txt', data, delimiter=',')
  • 参数解释:
    • 'saved_data.txt' 是要保存的文件名。
    • data 是要保存的NumPy数组。
    • delimiter=',' 指定了数据之间的分隔符。

二进制文件存取操作

从二进制文件读取数据 (np.load)

# 从二进制文件读取数据
data = np.load('data.npy')
print("从二进制文件读取的数据:")
print(data)
  • 参数解释:
    • 'data.npy' 是要读取的二进制文件名,.npy 是NumPy默认的二进制文件格式。

将数据保存到二进制文件 (np.save)

data = np.array([[1, 2, 3],[4, 5, 6]])
# 将数据保存到二进制文件
np.save('saved_data.npy', data)
  • 参数解释:
    • 'saved_data.npy' 是要保存的二进制文件名,.npy 是NumPy默认的二进制文件格式。
    • data 是要保存的NumPy数组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/27688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker|了解容器镜像层(2)

引言 容器非常神奇。它们允许简单的进程表现得像虚拟机。在这种优雅的底层是一组模式和实践&#xff0c;最终使一切运作起来。在设计的根本是层。层是存储和分发容器化文件系统内容的基本方式。这种设计既出人意料地简单&#xff0c;同时又非常强大。在今天的帖子[1]中&#xf…

基于mybatis plus增加较复杂自定义查询以及分页

基于java技术&#xff0c;spring-boot和mybatis-plus搭建后台框架是现在非常流行的技术。 其中关于多表关联查询的实现相对比较复杂&#xff0c;在这里进行记录以供开发人员参考。 以一个系统中实际的实体类为查询为例&#xff0c; T3dMaterial实体其中的fileType属性及字段…

桶排序!!

桶排序 算法描述bucketSort函数bucketSort完整代码topKFrequent函数topKFrequent完整代码 完整代码 算法描述 给定一个整数数组 nums 和一个整数 k &#xff0c;请返回其中出现频率前 k 高的元素。可以按 任意顺序 返回答案。 bucketSort函数 这个函数将输入数组根据元素出现…

Scrapy与MongoDB的异步数据存储

在数据采集过程中&#xff0c;处理大量的数据请求和存储任务是常见的需求。使用Scrapy来爬取数据并将其存储到MongoDB中是一个高效的解决方案。本文将介绍如何实现一个异步插入MongoDB的Scrapy管道。 项目背景 在本项目中&#xff0c;我们需要从某些公开网站上爬取数据&#…

java安装并配置环境

安装前请确保本机没有java的残留&#xff0c;否则将会安装报错 1.安装java jdk&#xff1a;安装路径Java Downloads | Oracle 中国 百度网盘链接&#xff1a;https://pan.baidu.com/s/11-3f2QEquIG3JYw4syklmQ 提取码&#xff1a;518e 2.双击 按照流程直接点击下一步&#x…

618:带货短剧,阿里VS拼多多的新战场

霸道总裁爱上我、穿越回古代成为后宫之主...让人上头的短剧今年持续升温&#xff0c;成为不少人的“电子榨菜”。 今年618&#xff0c;短剧又变身火热的主角&#xff0c;成为各大平台和品牌的新战场。 淘宝早在“逛逛”板块的二级页面&#xff0c;增加了名为“剧场”的板块&a…

机器学习实验------PCA

目录 一、介绍 二、算法流程 &#xff08;1&#xff09;数据中心化 &#xff08;2&#xff09;计算协方差矩阵 &#xff08;3&#xff09;特征值分解 &#xff08;4&#xff09;选择特征 三、运行结果展示 四、实验中遇到的问题 五、PCA的优缺点 优点&#xff1a; 缺点…

vue相关的前端知识回顾

nvm的安装 nvm 是一个 nodejs 版本管理工具。 使用 nvm 可以安装不同版本的 nodejs。也能够实时的切换不同的版本的NodeJS。 官方文档&#xff1a;https://github.com/nvm-sh/nvm 安装命令&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/in…

联想正式发布全栈算力基础设施新品,加速筑基AI 2.0时代

6月14日&#xff0c;以“异构智算 稳定高效”为主题的联想算力基础设施新品发布会在北京成功举办。 据「TMT星球」了解&#xff0c;在与会嘉宾和合作伙伴的见证下&#xff0c;联想正式发布率先搭载英特尔至强 6能效核处理器的联想问天WR5220 G5、联想ThinkSystem SR630 V4、联…

前端传递bool型后端用int收不到

文章目录 背景模拟错误点解决方法 背景 我前几天遇到一个低级错误&#xff0c;就是我前端发一个请求&#xff0c;把参数送到后端&#xff0c;但是我参数里面无意间传的布尔型&#xff08;刚开始一直没注意到&#xff0c;因为当时参数有十几个&#xff09;&#xff0c;但是我后…

Python-算法编程100例-系统设计题(入门级)-疫情人员管理

题目描述&#xff1a; 现有一套用于管理疫情下人员流动风险的软件系统&#xff0c;请实现以下接口&#xff1a; RiskMonitor(int[] people):系统初始化&#xff0c;people[i]的下标表示人员编号&#xff0c;值表示所在地区的编号。初始时所有地区&#xff08;包括没人的地区&…

“土猪拱白菜” 的学霸张锡峰,如今也苦于卷后端

大家好&#xff0c;我是程序员鱼皮&#xff0c;前几天在网上刷到了一个视频&#xff0c;是对几年前高考励志演讲的学霸张锡峰的采访。 不知道大家有没有看过他的演讲视频。在演讲中&#xff0c;衡水中学的学霸张锡峰表达了城乡孩子差距大、穷人家的孩子只想要努力成为父母的骄…

[C#]使用C#部署yolov10的目标检测tensorrt模型

【测试通过环境】 win10 x64vs2019 cuda11.7cudnn8.8.0 TensorRT-8.6.1.6 opencvsharp4.9.0 .NET Framework4.7.2 NVIDIA GeForce RTX 2070 Super cuda和tensorrt版本和上述环境版本不一样的需要重新编译TensorRtExtern.dll&#xff0c;TensorRtExtern源码地址&#xff1a;T…

博客论坛系统java博客管理系统基于springboot+vue的前后端分离博客论坛系统

文章目录 博客论坛系统一、项目演示二、项目介绍三、部分功能截图四、部分代码展示五、底部获取项目源码&#xff08;9.9&#xffe5;带走&#xff09; 博客论坛系统 一、项目演示 博客论坛系统 二、项目介绍 基于springbootvue的前后端分离博客论坛系统 系统角色&#xff1a…

java程序员写博客的方法论

作为一名Java程序员&#xff0c;撰写技术博客是一种提升个人品牌、分享知识以及巩固学习成果的有效方式。以下是一些关于如何高效撰写高质量Java技术博客的方法论建议&#xff1a; 1. 明确目标受众 确定你的读者是谁&#xff1a;初学者、中级开发者还是高级工程师&#xff1f…

【Qt】QT textBrowser 设置字体颜色和大小

1. 效果 2. 代码 {ui->methodText->append("<font size9 colorgreen> dddddddddd </font>");ui->methodText->append("<font size9 colorred> vvvvvvvvvv </font>"); }

局域网监控软件有哪些:五款好用的网络监控神器分享(收藏篇)

在日益复杂的企业网络环境中&#xff0c;有效地监控局域网内的活动对于确保网络安全、提高工作效率和维护企业资产至关重要。 为此&#xff0c;精选了五款市场上广受好评的局域网监控软件&#xff0c;它们各自具备独特的功能和优势&#xff0c;能够满足不同规模企业的需求&…

如何开发高效服务(C++ )

在 C 开发高效服务器时&#xff0c;常用的开发模式和设计模式能够帮助你构建高效、可扩展和可维护的服务器。以下是一些常见的模式和设计模式&#xff1a; 1. 并发和并行编程模型 1.1 Reactor 模式 Reactor 模式是一种事件驱动设计模式&#xff0c;广泛用于高性能服务器编程…

【七合一】字典词典成语古诗词造句英语单词文库

帝国CMS7.5 UTF-8 系统开源&#xff0c;不限域名 采用静态伪静态&#xff08;会缓存静态文件&#xff09; 一款7合一的字词句诗典籍模板&#xff0c;包含字典、词典、成语、名句、诗词、古籍、英语、作文、等等。是一款养站神器。 作文范文,作文范文可生成word文档下载能自由…

【面经总结】Java集合 - Map

Map 概述 Map 架构 HashMap 要点 以 散列(哈希表) 方式存储键值对&#xff0c;访问速度快没有顺序性允许使用空值和空键有两个影响其性能的参数&#xff1a;初始容量和负载因子。 初始容量&#xff1a;哈希表创建时的容量负载因子&#xff1a;其容量自动扩容之前被允许的最大…