机器学习(五) -- 无监督学习(2) --降维2

news2024/11/16 1:04:25

系列文章目录及链接

上篇:机器学习(五) -- 无监督学习(2) --降维1
下篇:


前言

tips:标题前有“***”的内容为补充内容,是给好奇心重的宝宝看的,可自行跳过。文章内容被“文章内容”删除线标记的,也可以自行跳过。“!!!”一般需要特别注意或者容易出错的地方。

本系列文章是作者边学习边总结的,内容有不对的地方还请多多指正,同时本系列文章会不断完善,每篇文章不定时会有修改。

由于作者时间不算富裕,有些内容的《算法实现》部分暂未完善,以后有时间再来补充。见谅!

文中为方便理解,会将接口在用到的时候才导入,实际中应在文件开始统一导入。


 三、**算法实现

四、接口实现

0、三维图绘制

0.1、散点图

API:

ax.scatter(xs, ys, zs, s=20, c=None, depthshade=True, *args, *kwargs)

    xs,ys,zs:输入数据;
    s:scatter点的尺寸
    c:颜色,如c = 'r'就是红色;
    depthshase:透明化,True为透明,默认为True,False为不透明
    *args等为扩展变量,如maker = 'o',则scatter结果为’o‘的形状
# 获取数据
data = [[1,7,3,4], [1,4,7,3], [4,3,7,1]]
x,y,z=data[0],data[1],data[2]



# 创建一个新的图
fig = plt.figure()
 
# 创建一个3D绘图区域
ax = fig.add_subplot(111, projection='3d')

# 画出3D散点图
ax.scatter(x, y, z, c=np.arange(4))
 
# 设置标签
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('Z轴')

# 显示图
plt.show()

 

0.2、直线图

API:

ax.plot(x,y,z,label=' ')
data = [[1,7,3,4], [1,4,7,3], [4,3,7,1]]
x,y,z=data[0],data[1],data[2]



fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(x, y, z, label='线')
ax.legend()
plt.show()

 

theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)



fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(x, y, z, label='参数曲线')
ax.legend()
plt.show()

 

0.3、线框图

API:

ax.plot_wireframe(X, Y, Z, *args, **kwargs)

    X,Y,Z:输入数据
    rstride:行步长
    cstride:列步长
    rcount:行数上限
    ccount:列数上限
from mpl_toolkits.mplot3d import axes3d

# 获取一些测试数据
x, y, z = axes3d.get_test_data(0.05)



fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 绘制一个基本的线框
ax.plot_wireframe(x, y, z, rstride=10, cstride=10)

plt.show()

 

0.4、表面图

API:

ax.plot_surface(X, Y, Z, *args, **kwargs)

    X,Y,Z:数据
    rstride、cstride、rcount、ccount:同Wireframe plots定义
    color:表面颜色
    cmap:图层
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
 
# 制作数据
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)



fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 绘制表面
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,linewidth=0, antialiased=False)
 
# 自定义z轴
ax.set_zlim(-1.01, 1.01)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
 
# 添加一个将值映射到颜色的颜色条
fig.colorbar(surf, shrink=0.5, aspect=5)
 
plt.show()

 

0.5、三角表面图

API:

ax.plot_trisurf(*args, **kwargs)

    X,Y,Z:数据
    其他参数类似surface-plot
n_radii = 8
n_angles = 36
 
# 使半径和角度空间(半径r=0省略,以消除重复)。
radii = np.linspace(0.125, 1.0, n_radii)
angles = np.linspace(0, 2*np.pi, n_angles, endpoint=False)
 
# 重复每个半径的所有角度
angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)
 
# 将极坐标(半径,角度)转换为直角坐标(x, y)
# (0,0)是在这个阶段手动添加的,所以不会有重复
# (x, y)平面上的#个点
x = np.append(0, (radii*np.cos(angles)).flatten())
y = np.append(0, (radii*np.sin(angles)).flatten())
 
# 计算z来得到普林格曲面
z = np.sin(-x*y)



fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
 
ax.plot_trisurf(x, y, z, linewidth=0.2, antialiased=True)
 
plt.show()

 

0.6、等高线图

API:

ax.contour(X, Y, Z, *args, **kwargs)

from mpl_toolkits.mplot3d import axes3d
from matplotlib import cm

X, Y, Z = axes3d.get_test_data(0.05)



fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
cset = ax.contour(X, Y, Z, cmap=cm.coolwarm)
ax.clabel(cset, fontsize=9, inline=1)
 
plt.show()

 

0.7、条形图

API:

ax.bar(left, height, zs=0, zdir='z', *args, **kwargs

x,y,zs = z,数据
zdir:条形图平面化的方向
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
for c, z in zip(['r', 'g', 'b', 'y'], [30, 20, 10, 0]):
    xs = np.arange(20)
    ys = np.random.rand(20)
 
    # 您可以提供单一颜色或数组。为了证明这一点,
    # 每一组的第一栏将被涂成青色。
    cs = [c] * len(xs)
    cs[0] = 'c'
    ax.bar(xs, ys, zs=z, zdir='y', color=cs, alpha=0.8)
 
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
 
plt.show()

 

0.8、子图

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
 
# 用x轴和y轴画一条sin曲线
x = np.linspace(0, 1, 100)
y = np.sin(x * 2 * np.pi) / 2 + 0.5
ax.plot(x, y, zs=0, zdir='z', label='curve in (x,y)')
 
# 在x和z轴上绘制散点图数据(每种颜色20个2D点)
colors = ('r', 'g', 'b', 'k')
x = np.random.sample(20*len(colors))
y = np.random.sample(20*len(colors))
c_list = []
for c in colors:
    c_list.append([c]*20)

c_list=np.array(c_list)
c_list=c_list.reshape(-1)
# 通过使用zdir='y',这些点的y值固定为zs值0
# 和(x,y)点绘制在x和z轴上。
ax.scatter(x, y, zs=0, zdir='y', c=c_list, label='points in (x,z)')
 
# 制作图例,设置轴限制和标签
ax.legend()
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
ax.set_zlim(0, 1)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

 

1、PCA

sklearn.decomposition.PCA
 
导入:
from sklearn.decomposition import PCA
 
语法:
pca = PCA(n_components=None,copy=True,whiten=False,svd_solver="auto",tol=0.0,iterated_power="auto",random_state=None)
参数:
    n_components: 保留的主成分数量。
        None(默认值),保留所有主成分。
        整数k,则只保留前k个主成分;
        k为小数,保留主成分的方差百分比。

属性:
components_: 选定的主成分。是一个形状为 (n_components, n_features) 的数组,表示每个主成分的特征向量。
explained_variance_: 每个主成分的解释方差。它是一个包含了按降序排列的每个主成分的解释方差值的一维数组。
explained_variance_ratio_: 每个主成分的解释方差比例。它是一个包含了按降序排列的每个主成分的解释方差比例的一维数组。
singular_values_: 每个主成分的奇异值。它是一个包含了按降序排列的每个主成分的奇异值的一维数组。
mean_: 每个特征的均值。是一个形状为 (n_features,) 的一维数组。
noise_variance_: 噪声方差的估计值。只有当 whiten=True 时才计算。
n_samples_:训练数据中的样本数量。
n_features_:训练数据中的特征数。

方法:
fit(X): 拟合PCA模型,其中X是形状为(n_samples, n_features)的输入数据。
transform(X): 将输入数据X转换为降维后的表示。接受形状为(n_samples, n_features)的输入数据,并返回降维后的数据表示,形状为(n_samples, n_components)。
fit_transform(X): 这个方法是fit()和transform()的结合,即先拟合模型,然后将输入数据转换为降维后的表示。
inverse_transform(X): 这个方法用于将降维后的数据表示X转换为原始的高维表示。
score(X):用于计算数据在主成分空间中的重构误差。
get_precision():用于返回数据的精度矩阵(仅在whiten=True时可用)。

1.1、获取数据

from sklearn.decomposition import PCA

# 获取数据
data=np.array([[0,1,0],
          [4,5,9],
          [10,2,6],
          [10,11,12]])
x,y,z=data[:,0],data[:,1],data[:,2]

print(data.shape)

# 可视化
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z,c='b')
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('Z轴')
plt.show()

1.2、数据预处理

1.3、特征工程

1.4、模型训练

# 实例化学习器
transfer1 = PCA(n_components=0.9)

# 调用fit_transform
data1 = transfer1.fit_transform(data)



# 实例化学习器
transfer2 = PCA(n_components=2)

# 调用fit_transform
data2 = transfer2.fit_transform(data)

1.5、模型评估

print("保留75%的信息,降维结果为:\n", data1)
print("降维到2维的结果:\n", data2)

# 可视化
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 原数据
ax.scatter(x, y, z,c='b')

# 降维后数据
print(data2.shape)
ax.scatter(data2[:,0], data2[:,1],c='r')
# 等价与=ax.scatter(data2[:,0], data2[:,1],0,c='r')

ax.legend(['原数据','降维后数据'])
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('Z轴')
plt.show()

1.6、结果预测

经过模型评估后通过的模型可以代入真实值进行预测。

!!!注意
出现:ValueError: n_components=4 must be between 0 and min(n_samples, n_features)=3 with svd_solver='full'

 是由于:PCA降维后的特征数数少于样本数

如把n_components超过3,就会出现此类错误:

原因:

矩阵shape(样本数,特征数)

首先,PCA降维实现是对特征数的减少,而不是样本数,因此降维之后的样本数是不变的,而PCA降维后特征数多于样本数数量会报错,这是算法本身决定的,

PCA降维原理,如果降到n维,就需要构造一个n维的投影空间,而n维投影空间至少要通过n+1个样本数量决定(两点确定线,三点确定面),如果样本数量太少,就无法得到一个有效的投影空间。

如下将二维数据点,投影到一条直线上,就需要两个或以上的点,这样才能确定一条直线,使得样本点到直线的距离和最小,如果是一个点就有无数条直线,因此这里样本数要大于1。

所以要求降维后特征数少于样本数

然后,在使用PCA接时n_components<=min(n_samples, n_features),这里可以等于的原因是,在相等时,会默认把最后一个特征赋值0,相当于有效特征数还是少于样本数的。

2、KernelPCA

sklearn.decomposition.KernelPCA
 
导入:
from sklearn.decomposition import KernelPCA
 
语法:
kpca=KernelPCA(n_components=None, *, kernel='linear', gamma=None, degree=3, coef0=1, kernel_params=None, alpha=1.0, fit_inverse_transform=False, eigen_solver='auto', tol=0, max_iter=None, remove_zero_eig=False, random_state=None, copy_X=True, n_jobs=None)
参数:
    n_components:主成分个数
    kernel:选择的核函数。"linear"(默认值)、“poly”、“rbf”、“sigmoid”、“cosine”、“precomputed”
    gamma:核函数选择“poly”、“rbf”、“sigmoid”时有效。浮点类型,默认值=1/n_features

属性:
kpca.lambdas_:核化矩阵的特征值
alphas_:特征向量
dual_coef_:逆转换矩阵

方法:
kpca.fit(x[,y]):拟合模型
transform(x):转换x
kpca.fit_transform(x[,y]):根据x中的数据拟合模型并转换x。
inverse_transform(x):将x转换回原始空间

2.1、获取数据

from sklearn.datasets import make_moons

from sklearn.decomposition import PCA
from sklearn.decomposition import KernelPCA

# 获取数据
x, y = make_moons(n_samples=100, random_state=233)
print(x.shape)

# 可视化
plt.scatter(x[y == 0, 0], x[y == 0, 1], color='red', marker='^', alpha=0.5)
plt.scatter(x[y == 1, 0], x[y == 1, 1], color='blue', marker='o', alpha=0.5)
plt.title("样本数据")
plt.show()

2.2、数据预处理

2.3、特征工程

2.4、模型训练

# PCA
pca2 = PCA(n_components=2)
x_pca2 = pca2.fit_transform(x)

pca = PCA(n_components=1)
x_pca = pca.fit_transform(x)

# KernelPCA
kpca = KernelPCA(n_components=2, kernel='rbf', gamma=15)
x_kpca = kpca.fit_transform(x)

2.5、模型评估

# 绘制降维结果并与原样本数据对比
fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(7, 3))
ax[0].scatter(x_pca2[y == 0, 0], x_pca2[y == 0, 1], c='r', marker='^')
ax[0].scatter(x_pca2[y == 1, 0], x_pca2[y == 1, 1], c='b', marker='o')

ax[1].scatter(x_pca[y == 0], np.zeros((50, 1))+0.02, c='r', marker='^')
ax[1].scatter(x_pca[y == 1], np.zeros((50, 1))-0.02, c='b', marker='o')


ax[0].set_xlabel('X')
ax[0].set_ylabel('Y')
ax[0].set_title("去中心化的数据")

ax[1].set_ylim([-1, 1])
ax[1].set_yticks([])
ax[1].set_xlabel('X_pca')
ax[1].set_title("降维后样本数据")
plt.tight_layout()
plt.show()
# 绘制降维结果并与原样本数据对比
kfig, kx = plt.subplots(nrows=1, ncols=2, figsize=(7, 3))
kx[0].scatter(x[y == 0, 0], x[y == 0, 1], c='r', marker='^')
kx[0].scatter(x[y == 1, 0], x[y == 1, 1], c='b', marker='o')
kx[1].scatter(x_kpca[y == 0, 0], x_kpca[y == 0, 1], c='r', marker='^')
kx[1].scatter(x_kpca[y == 1, 0], x_kpca[y == 1, 1], c='b', marker='o')

kx[0].set_xlabel('X')
kx[0].set_ylabel('Y')
kx[0].set_title("样本数据")

kx[1].set_ylim([-1, 1])
kx[1].set_yticks([])
kx[1].set_xlabel('X_kpca')
kx[1].set_title("降维后样本数据")
plt.tight_layout()
plt.show()

 

2.6、结果预测

经过模型评估后通过的模型可以代入真实值进行预测。

3、PCA2

3.1、获取数据

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

from sklearn.decomposition import PCA

# 获取数据
iris = load_iris()

3.2、数据预处理

# 划分数据集
x_train,x_test,y_train,y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=1473) 
print(x_train.shape)

# 可视化
plt.figure()
plt.scatter(x_train[:,0],x_train[:,1],c=y_train,edgecolors='b')
plt.show()

3.3、特征工程

3.4、模型训练

# 实例化学习器
transfer= PCA(n_components=3)

# 调用fit_transform
x_train = transfer.fit_transform(x_train)

3.5、模型评估

print(x_train.shape)
# 可视化
plt.figure()
plt.scatter(x_train[:,0],x_train[:,1],c=y_train,edgecolors='b')
plt.show()

2.6、结果预测

经过模型评估后通过的模型可以代入真实值进行预测。

4、LDA

sklearn.discriminant_analysis.LinearDiscriminantAnalysis
 
导入:
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
 
语法:
lda=LinearDiscriminantAnalysis(n_components=None)
参数:
    n_components:降维后维度

属性:
lda.coef_:权重向量
lda.intercept:截距向量
lda.covariance_:每个类别的协方差矩阵
lda.means_:每个类别的均值向量
lda.xbar_:整体样本的均值向量
lda.n_iter_:实际迭代次数

方法:
lda.fit(x[,y]):拟合模型
lda.predict(x):用模型预测,返回预测值
lda.score(x,y):准确率
lda.predict_log_proba(x):x预测为各个类别的概率的对数值。
lda.predict_proba(x):x预测为各个类别的概率的概率值

4.1、获取数据

# API导入
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis 


# 获取数据
iris = load_iris()

4.2、数据预处理

# 划分数据集
x_train,x_test,y_train,y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=1473) 
print(x_train.shape)

# 可视化
plt.figure()
plt.scatter(x_train[:,0],x_train[:,1],c=y_train,edgecolors='b')
plt.show()

4.3、特征工程

4.4、模型训练

# 实例化学习器
lda = LinearDiscriminantAnalysis(n_components=2) 

# 拟合转换
x_train = lda.fit_transform(x_train, y_train) #拟合训练并转换

4.5、模型评估

print(x_train.shape)

# 可视化
plt.figure()
plt.scatter(x_train[:,0],x_train[:,1],c=y_train,edgecolors='b')
plt.show()

4.6、结果预测

经过模型评估后通过的模型可以代入真实值进行预测。


旧梦可以重温,且看:机器学习(五) -- 无监督学习(2) --降维1
欲知后事如何,且看:

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

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

相关文章

《动手做科研》06. 如何产生新的研究想法

地址链接:《动手做科研》06. 如何产生新的研究想法 欢迎加入我的知识星球&#xff0c;定期分享AI论文干货知识&#xff01; 导读: 提出好的研究想法是相当困难的&#xff0c;特别是当你刚接触一个领域时——这需要对文献中的空白有所了解。然而&#xff0c;产生研究想法的过程可…

数学建模--智能算法之模拟退火算法

目录 算法原理 应用场景 实现方法 代码示例&#xff1a; MATLAB&#xff1a; Python&#xff1a; 总结 模拟退火算法在数学建模中的具体应用案例有哪些&#xff1f; 如何选择模拟退火算法的参数&#xff08;如初始温度、冷却率等&#xff09;以优化求解过程&#xff1…

根据json构建uml类图代码工具实现

文章目录 1.UML简介1.1 什么是UML建模1.2 使用UML建模的好处 2.当前UML在研发场景下痛点3.UML工具的优化实现3.1 json结构设计3.2 json类图解析器实现3.3 在线uml类图渲染实现3.3.1 前端渲染页面3.3.2 后端数据接口 3.4 在线渲染效果 4. 总结 【摘要】本文介绍UML基本概念及相关…

Linux中安装C#的.net,创建运行后端或控制台项目

安装脚本命令&#xff1a; 创建一个sh文件并将该文件更改权限运行 sudo apt update wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb sudo apt-get upd…

科普文:Spring Cloud Alibaba在GraalVM上的性能测试

GraalVM 介绍 GraalVM概述 - Spring Cloud Alibaba官网 科普文&#xff1a;GraalVM简介-CSDN博客 科普文&#xff1a;OpenJDK vs. GraalVM vs. Amazon Corretto性能测试-CSDN博客 科普文&#xff1a;【方向盘】OpenJDK生态圈-CSDN博客 科普文&#xff1a;Oracle JDK收费后…

【32单片机篇】项目:实时时钟

一、项目需求 1. OLED屏幕显示当前时间、日期、闹钟等信息&#xff1b; 2. 正常模式下&#xff0c;按下 KEY1 &#xff0c;进入时间设置模式&#xff0c;此时按下 KEY2 则可以循环跳转修改秒、分、时、日、月、年&#xff1b; 3. 时间设置模式下&#xff0c;KEY3 增加数值&…

【Redis】如何利用 Redis 实现一个分布式锁?

&#x1f44f;大家好&#xff01;我是和风coding&#xff0c;希望我的文章能给你带来帮助&#xff01; &#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&#x1f44d;一下博主哦 &#x1f4dd;点击 我的主页 还可以看到和风的其他内容噢&#x…

【优秀python算法设计】基于Python网络爬虫的今日头条新闻数据分析与热度预测模型构建的设计与实现

1 绪论 1.1 背景与意义 随着互联网的快速发展和移动互联技术的普及&#xff0c;作为新兴的资讯平台&#xff0c;今日头条成为了用户获取新闻资讯、时事热点和个性化推荐的重要渠道。大量用户在今日头条上浏览、阅读并产生热度&#xff0c;使得今日头条成为了观察舆论热点和分…

Csrf复习(pikachu靶场和防御手段)

CSRF漏洞简介 CSRF又称跨站请求伪造&#xff0c;是指攻击者在用户登录的状态下&#xff08;浏览器保存了用户的cookie&#xff09;通过伪造恶意url诱导用户点击&#xff0c;借助用户的cookie网站权限&#xff08;冒充用户身份来进行非法操作&#xff0c;对于服务器来说是合法的…

达梦数据库系列—36.分区表

目录 1、分区表的分类 1.1 范围分区表 1.2 List分区表 1.3 哈希分区表 1.4 多级分区表 二级分区 三级分区 2、分区表的维护 2.1 增加分区 2.2 删除分区 2.3 交换分区 2.4 融合分区 3、全局索引和局部索引 1、分区表的分类 范围(range)水平分区&#xff1a;对表中…

【LLM大模型】AI大模型大厂面试真题:「2024大厂大模型技术岗内部面试题+答案」

AI大模型岗的大厂门槛又降低了&#xff01;实在太缺人了&#xff0c;大模型岗位真的强烈建议各位多投提前批&#xff0c;▶️众所周知&#xff0c;2025届秋招提前批已经打响&#xff0c;&#x1f64b;在这里真心建议大家6月7月一定要多投提前批&#xff01; &#x1f4bb;我们…

【深度学习|目标跟踪】SSD+Sort实现MOT!

SSDSort实现目标跟踪 源码地址1、&#x1f64c;&#x1f3fb;匈牙利匹配算法1.1 什么是匈牙利匹配1.2 什么是二分图&#xff1a;1.3 最大匹配1.4 最优匹配1.5 最小点覆盖1.6 交替路1.7 增广路1.8 匈牙利匹配具体流程以及实例1.9 广度优先匹配1.10 深度优先匹配1.11 给匹配加权来…

SQL—数据库与表操作

目录 SQL语句分类 DDL 数据库操作 1. 查询所有数据库 2. 查询当前数据库 3. 创建数据库 案例&#xff1a;创建一个itcast数据库&#xff0c;使用数据库默认的字符集 案例&#xff1a;创建一个itheima数据库&#xff0c;并且指定字符集 4. 删除数据库 5. 切换数据库…

Java从入门到精通 (十) ~ 计算机是如何工作的呢 ?

每天进步一点点&#xff0c;每天创造一点点&#xff0c;每天做事多一点&#xff0c;愿你事事都领先&#xff0c;卓越成绩现眼前&#xff0c;美好生活一天又一天。 文章目录 目录 前言 前置知识 认识一下计算机的真实相貌 都说计算机使用二进制传输&#xff0c;为什么要使…

哇!0.8秒启动!Linux快速启动方案分享,全志T113-i国产平台!

本文主要介绍基于创龙科技TLT113-EVM评估板(基于全志T113-i)的系统快速启动方案,适用开发环境如下。 Windows开发环境:Windows 7 64bit、Windows 10 64bit 虚拟机:VMware15.5.5 Linux开发环境:Ubuntu18.04.4 64bit U-Boot:U-Boot-2018.07 Kernel:Linux-5.4.61、Li…

政策收紧下,给EI人的一个小建议!

自中央大力推动文化体制改革、促进文化产业加快发展以来&#xff0c;我国出版业的数字化转型升级工作拉开序幕。其后&#xff0c;得益于新技术的发展、市场趋势的变化&#xff0c;数字出版开始出现“井喷”&#xff0c;出版融合成绩巨大&#xff0c;但也面临诸多挑战&#xff0…

手持气象站:便携与精准的完美结合

在气象监测领域&#xff0c;手持气象站以其独特的优势特点&#xff0c;正逐渐成为专业人士和爱好者的首选工具。这款小巧而强大的设备&#xff0c;将便携性与精准性完美融合&#xff0c;为各种户外活动和科学研究提供了极大的便利。 首先&#xff0c;手持气象站的最大亮点在于其…

虚拟主播实时直播技术方案:以年轻人互动方式探索直播新玩法2

随着互联网将内容传播的渠道变得逐渐丰富&#xff0c;观众对直播内容形式、互动玩法的多元化要求越来越高&#xff0c;文旅、电商、企业品牌、广电、泛娱乐MCN、游戏动漫等等领域纷纷主动迎合Z世代喜好&#xff0c;利用虚拟人直播内容抢夺观众的注意力&#xff0c;以独特的虚拟…

2024 杭电多校 第四场

分组 给定 n 个正整数 a1,a2,…,an (1≤ai<2m) 以及 0 到 2m−1 的权重 w0,w1,…,w2m−1&#xff1b;你需要把这 n 个正整数分成四组 A,B,C,D&#xff0c;令 f(A),f(B),f(C),f(D) 分别表示每组中所有数字的异或和&#xff0c;你的分组方案需要最小化 wf(A),wf(B),wf(C),wf(…

智慧社区的秘密武器:数据可视化的力量

在现代城市的发展中&#xff0c;智慧社区已成为提升居民生活品质和管理效率的重要方式。而数据可视化作为信息技术的关键工具&#xff0c;正是实现智慧社区目标的强大助推器。通过将复杂的数据转化为直观的图表和可视化图像&#xff0c;数据可视化不仅能够帮助社区管理者快速理…