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

Streamlit从入门到精通:构建数据应用的利器

在数据科学与机器学习日益普及的今天,如何快速将模型部署为可交互的应用成为了许多数据科学家的重要任务。Streamlit,作为一个开源的Python库,专为数据科学家设计,能够帮助我们轻松构建美观且直观的Web应用。本文将从入门到精通,带你全面了解Streamlit的使用方法和最佳实践。

一、什么是 Streamlit?

Streamlit 是一个用于创建数据应用的开源 Python 库,它专为数据科学家和机器学习工程师设计,旨在简化数据可视化和交互式应用程序的构建过程。凭借其简单易用的 API,Streamlit 使得开发者能够将数据脚本快速转化为美观且可交互的 Web 应用,而不需要深入掌握前端开发技术。

1.1 Streamlit 的目的

Streamlit 的设计目的是为了降低数据应用开发的门槛,让数据科学家能够更专注于数据分析和模型开发,而无需投入太多时间在 Web 开发的复杂性上。通过 Streamlit,用户可以快速构建原型,分享分析结果,甚至创建完整的产品。这使得数据科学家能够更快地验证想法、迭代模型和展示成果。

1.2 Streamlit 的核心特点

  • 简洁易用:Streamlit 的 API 设计直观,用户只需编写少量 Python 代码即可构建复杂的应用。通过简单的函数调用,用户可以实现各种功能,无需掌握 HTML、CSS 或 JavaScript。

  • 实时更新:应用的界面会根据代码的修改实时更新,用户在修改代码后只需保存,Streamlit 会自动重新加载应用,极大提高了开发效率。

  • 丰富的组件:Streamlit 提供了多种内置组件,例如文本框、按钮、滑块、下拉菜单、数据表等。这些组件可以轻松集成到应用中,增强交互性,使用户能够与数据进行直接交互。

  • 支持多种数据可视化库:Streamlit 能够与流行的 Python 数据可视化库如 Matplotlib、Seaborn、Plotly 和 Altair 无缝集成,使得用户可以轻松创建各种图表和可视化效果。

  • 无缝连接 Python 生态:Streamlit 与 NumPy、Pandas、Scikit-learn 等主流数据科学库兼容,使得用户可以直接利用已有的数据处理和机器学习工具,无需额外操作。

  • 开源和社区支持:作为一个开源项目,Streamlit 拥有一个活跃的社区,用户可以获得丰富的文档、示例和支持,方便学习和交流。

1.3 适用场景

Streamlit 特别适合用于以下场景:

  • 数据可视化:快速展示数据分析结果,通过图表和可视化工具帮助理解数据。

  • 机器学习模型展示:将训练好的机器学习模型转化为用户友好的接口,便于非技术人员进行交互和使用。

  • 数据报告和仪表盘:创建动态的数据报告和仪表盘,实时更新数据,便于决策和分析。

  • 快速原型开发:帮助数据科学家快速构建原型,迭代设计和验证想法。

通过这些特点和应用场景,Streamlit 已成为数据科学领域中一种流行的工具,使得构建和分享数据应用变得更加简单。

二、安装与环境配置

在开始使用 Streamlit 之前,我们需要确保 Python 环境已经正确配置并安装了 Streamlit 库。以下是详细的安装步骤和配置方法。

2.1 环境要求

  • Python 版本:Streamlit 支持 Python 3.7 及以上版本。建议使用最新的稳定版本,以便获得最新的功能和性能改进。
  • 操作系统:Streamlit 可以在 Windows、macOS 和 Linux 系统上运行,兼容性良好。

2.2 安装 Streamlit

  1. 确保安装了 Python 和 pip:首先,请确保你的计算机上安装了 Python。你可以通过在终端或命令提示符中输入以下命令检查 Python 和 pip 的版本:

    python --version
    pip --version
    

    如果未安装 Python,可以从 Python 官网 下载并安装。

  2. 安装 Streamlit:使用 pip 安装 Streamlit,非常简单。只需在命令行中输入以下命令:

    pip install streamlit
    

    该命令会自动下载并安装 Streamlit 及其依赖库。安装完成后,你可以通过以下命令来确认安装是否成功:

    streamlit --version

    如果命令返回 Streamlit 的版本号,说明安装成功。

2.3 验证安装

为了确保你正确安装了 Streamlit,可以运行一个示例应用。输入以下命令:

streamlit hello

此命令会启动一个示例应用,并在默认浏览器中打开。你将看到一个包含多个组件的页面,展示了 Streamlit 的基本功能和用法。

2.4 创建第一个 Streamlit 应用

创建一个新的 Python 文件,例如 app.py,并在其中添加以下简单代码:

import streamlit as stst.title("我的第一个 Streamlit 应用")
st.write("欢迎使用 Streamlit!")

在终端中运行你的应用:

streamlit run app.py

此时,默认浏览器将打开一个新窗口,展示你刚刚创建的简单应用。

2.5 常见问题与解决方案

  • 环境问题:在某些情况下,可能会出现依赖库版本不兼容的问题。建议使用虚拟环境(如venv或conda)来隔离项目环境,确保各个项目之间的依赖关系不会冲突。

  • 端口问题:默认情况下,Streamlit 会在8501端口运行。如果该端口被其他应用占用,你可以通过以下命令指定不同的端口:

    streamlit run app.py --server.port 8502
    
  • 防火墙设置:在某些操作系统上,防火墙设置可能会阻止应用访问网络。确保相关的端口在防火墙中被允许访问。

通过以上步骤和配置,你将能够顺利安装和运行 Streamlit,开启构建交互式数据应用的旅程。无论是简单的可视化展示,还是复杂的机器学习模型应用,Streamlit都将为你提供强有力的支持。

三、构建你的第一个 Streamlit 应用

在这一部分,我们将逐步构建一个简单的 Streamlit 应用。这个应用将展示如何使用 Streamlit 的基本组件,包括文本输入、按钮、数据可视化等。通过这个示例,你将能够了解 Streamlit 的工作流程和如何快速构建交互式的数据应用。

3.1 创建应用基础

首先,确保你已经安装了 Streamlit,并且在你的工作目录中创建一个新的 Python 文件,例如 app.py。在该文件中,我们将编写应用的基本结构。

3.1.1 应用结构

app.py 文件中添加以下代码:

import streamlit as st# 应用标题
st.title("我的第一个 Streamlit 应用")# 应用描述
st.write("这是一个简单的应用,演示如何使用 Streamlit 创建交互式界面。")

这段代码会在应用中显示标题和描述。接下来,我们将添加交互组件和可视化内容。

3.2 添加文本输入和按钮

为了让用户能够输入信息,我们可以使用文本输入框和按钮。用户输入的数据可以用来进行简单的动态计算或显示。

3.2.1 添加文本输入

app.py 中继续添加以下代码:

# 文本输入组件
name = st.text_input("请输入你的名字:")

这段代码会在应用中显示一个文本输入框,用户可以在这里输入他们的名字。

3.2.2 添加按钮和显示结果

接下来,我们添加一个按钮,并在用户点击时显示他们输入的名字:

# 按钮组件
if st.button("提交"):st.write(f"你好,{name}!欢迎使用 Streamlit 应用!")

完整的代码如下所示:

import streamlit as st# 应用标题
st.title("我的第一个 Streamlit 应用")
st.write("这是一个简单的应用,演示如何使用 Streamlit 创建交互式界面。")# 文本输入组件
name = st.text_input("请输入你的名字:")# 按钮组件
if st.button("提交"):st.write(f"你好,{name}!欢迎使用 Streamlit 应用!")

3.3 添加数据可视化

为了使应用更具吸引力,我们可以加入一些数据可视化的内容。在这个示例中,我们将使用 Matplotlib 库绘制一个简单的曲线图。首先,确保你已经安装了 Matplotlib:

pip install matplotlib
3.3.1 绘制图表

app.py 中添加以下代码,以绘制一个正弦波图表:

import numpy as np
import matplotlib.pyplot as plt# 生成数据
x = np.linspace(0, 10, 100)
y = np.sin(x)# 创建图表
plt.figure(figsize=(10, 5))
plt.plot(x, y, label='正弦波', color='blue')
plt.title('正弦函数图')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.axhline(0, color='black', lw=1)
plt.axvline(0, color='black', lw=1)
plt.grid()
plt.legend()# 在 Streamlit 中展示图表
st.pyplot(plt)
3.3.2 完整应用代码

到目前为止,你的 app.py 应该是这样的:

import streamlit as st
import numpy as np
import matplotlib.pyplot as plt# 应用标题
st.title("我的第一个 Streamlit 应用")
st.write("这是一个简单的应用,演示如何使用 Streamlit 创建交互式界面。")# 文本输入组件
name = st.text_input("请输入你的名字:")# 按钮组件
if st.button("提交"):st.write(f"你好,{name}!欢迎使用 Streamlit 应用!")# 生成数据
x = np.linspace(0, 10, 100)
y = np.sin(x)# 创建图表
plt.figure(figsize=(10, 5))
plt.plot(x, y, label='正弦波', color='blue')
plt.title('正弦函数图')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.axhline(0, color='black', lw=1)
plt.axvline(0, color='black', lw=1)
plt.grid()
plt.legend()# 在 Streamlit 中展示图表
st.pyplot(plt)

3.4 运行应用

在终端中运行以下命令以启动 Streamlit 应用:

streamlit run app.py

此时,默认浏览器将打开一个新窗口,你将看到应用界面。用户可以在文本框中输入他们的名字,点击“提交”按钮后,应用会显示个性化的欢迎信息。同时,正弦波图表将展示在下方。

3.5 进一步改进

至此,你已经成功构建了一个简单的 Streamlit 应用!在这个基础上,你可以尝试以下改进:

  • 添加更多的输入组件:例如滑块、下拉菜单等,以接收更多类型的用户输入。
  • 引入更多数据可视化类型:尝试使用 Plotly 或 Seaborn 库进行数据可视化,展示不同的图表。
  • 处理不同类型的数据:通过添加文件上传组件,允许用户上传自己的数据文件,并进行分析和可视化。
  • 实现更复杂的逻辑:结合数据处理库,如 Pandas,进行更复杂的数据分析和展示。

3.6 总结

通过本节的学习,你已经掌握了如何使用 Streamlit 构建一个简单的交互式应用。Streamlit 的简单性和强大功能使得它成为数据科学家和开发者展示数据和模型的优秀工具。在后续的学习中,你可以不断探索 Streamlit 的更多功能,开发出更复杂和实用的应用。

四、进阶使用

在掌握了 Streamlit 的基础用法后,我们可以进一步探索其进阶功能,以便构建更复杂和功能丰富的应用。在这一部分,我们将介绍一些 Streamlit 的高级特性,包括文件上传和下载、状态管理、以及如何优化应用的性能等。

4.1 文件上传与下载

Streamlit 支持用户上传文件和下载文件的功能,这使得用户可以与应用进行更深层次的交互。

4.1.1 文件上传

通过使用 st.file_uploader,用户可以轻松上传文件。我们可以处理不同类型的文件,例如 CSV、Excel 或图像文件。以下是一个示例代码,展示如何实现文件上传并读取 CSV 文件:

import pandas as pd
import streamlit as stst.title("上传并显示 CSV 文件")# 文件上传组件
uploaded_file = st.file_uploader("选择一个 CSV 文件", type="csv")if uploaded_file is not None:# 读取 CSV 文件data = pd.read_csv(uploaded_file)st.write("上传的 CSV 文件内容:")st.dataframe(data)  # 显示 DataFrame

在这个示例中,用户可以上传一个 CSV 文件,应用会读取该文件并将其内容显示为 DataFrame。

4.1.2 文件下载

Streamlit 还支持文件的下载。用户可以通过按钮下载生成的文件,以下是一个简单的示例,展示如何创建一个 CSV 文件并提供下载链接:

import pandas as pd
import streamlit as st# 创建一个示例 DataFrame
data = {'姓名': ['Alice', 'Bob', 'Charlie'], '年龄': [23, 30, 35]}
df = pd.DataFrame(data)# 将 DataFrame 保存为 CSV 文件
csv = df.to_csv(index=False)# 提供下载按钮
st.download_button(label="下载 CSV 文件",data=csv,file_name='data.csv',mime='text/csv'
)

在这个示例中,我们创建了一个简单的 DataFrame,并通过一个下载按钮允许用户下载该 DataFrame 的 CSV 文件。

4.2 状态管理

在多次交互过程中,应用中可能需要保留用户的状态信息。Streamlit 提供了 st.session_state 来存储会话状态。这样,用户在不同操作之间可以保持数据的连贯性。

4.2.1 使用会话状态

以下是一个示例,演示如何使用 st.session_state 来实现简单的计数器功能:

import streamlit as st# 初始化计数器
if 'count' not in st.session_state:st.session_state.count = 0# 创建按钮
if st.button("增加计数"):st.session_state.count += 1# 显示当前计数
st.write(f"当前计数:{st.session_state.count}")

在这个示例中,我们使用 st.session_state 来存储和管理计数器的状态。每当用户点击按钮时,计数器的值会递增,且在页面刷新后仍然保持该值。

4.3 使用缓存优化性能

当应用处理大型数据集或进行复杂计算时,使用缓存可以显著提高性能。Streamlit 提供了 @st.cache 装饰器,可以将某些函数的结果缓存,以避免重复计算。

4.3.1 缓存示例

以下是一个简单的示例,演示如何使用缓存来提高数据加载的性能:

import streamlit as st
import pandas as pd@st.cache
def load_data():# 模拟数据加载df = pd.read_csv("large_dataset.csv")return df# 调用加载数据的函数
data = load_data()st.write(data)

在这个示例中,load_data 函数通过 @st.cache 装饰器进行缓存,第一次调用时会加载数据,并在后续调用中直接返回已缓存的结果,从而提高加载速度。

4.4 自定义主题和布局

Streamlit 允许用户自定义应用的外观和布局,包括选择不同的主题和配置布局。

4.4.1 自定义主题

Streamlit 提供了一些内置的主题,可以通过 config.toml 文件进行配置。用户可以选择不同的配色方案、字体和其他视觉元素,以便更好地符合品牌或个人喜好。示例配置如下:

# .streamlit/config.toml
[theme]
primaryColor = "#F39C12"
backgroundColor = "#2C3E50"
secondaryBackgroundColor = "#34495E"
textColor = "#ECF0F1"

将该配置添加到 .streamlit/config.toml 文件中后,应用启动时将使用自定义的主题。

4.4.2 使用布局

Streamlit 还支持多种布局方式,如侧边栏、列布局等。以下是一个示例,展示如何使用侧边栏和列布局来组织页面:

import streamlit as stst.sidebar.title("导航")
option = st.sidebar.selectbox("选择一个选项", ["主页", "信息", "设置"])if option == "主页":st.write("欢迎来到主页!")
elif option == "信息":st.write("这里是一些信息内容。")
else:st.write("设置页面。")

在这个示例中,侧边栏允许用户选择不同的选项,从而动态展示不同的内容。

4.5 其他高级功能

Streamlit 还提供了许多其他高级功能,可以进一步增强应用的功能性和用户体验。例如:

  • 多页面应用:通过创建多个 Python 文件,可以将应用组织为多页面结构,方便用户导航。
  • 实时数据更新:利用 Streamlit 的st.cachest.experimental_rerun功能,可以实现自动刷新和实时数据更新。
  • 集成外部 API:通过调用外部 API,Streamlit 应用可以获取实时数据,进一步增强功能。

4.6 总结

在这一部分中,我们深入探讨了 Streamlit 的进阶用法,包括文件上传与下载、状态管理、性能优化、自定义主题和布局等功能。这些功能使得 Streamlit 应用不仅能够处理复杂的数据交互,还能提供良好的用户体验。掌握这些高级特性后,你将能够创建更为复杂且功能丰富的应用,充分发挥 Streamlit 的潜力。通过不断探索和实践,你将可以构建出创新且强大的数据应用,满足各类需求。

五、Streamlit最佳实践

在使用 Streamlit 构建应用时,遵循一些最佳实践可以帮助你提高应用性能、可维护性和用户体验。以下是一些建议,旨在帮助你更高效地使用 Streamlit。

5.1 组织代码结构

  1. 模块化设计:将应用的不同功能模块分离,使用多个 Python 文件组织代码。可以创建一个主文件来管理布局和导航,同时将数据处理、可视化和其他功能分散到独立的模块中。这种做法不仅提升了代码的可读性,还方便协作开发。

    例如,可以将数据加载和处理逻辑放在 data.py 中,而将可视化逻辑放在 visuals.py 中,主应用文件 app.py 则负责整合这些模块。

  2. 使用函数封装逻辑:将重复使用的代码逻辑封装为函数,减少代码重复,提高可重用性。尽量避免在主应用文件中写过多逻辑,这样可以保持代码的整洁性。

5.2 提高应用性能

  1. 利用缓存:使用 @st.cache 装饰器缓存数据加载和计算结果,避免不必要的重复操作。这在数据量大、计算复杂时尤其重要,可以显著提高应用响应速度。

  2. 限制数据量:在展示数据时,尽量控制数据量,避免一次性加载过多数据。可以通过分页或筛选功能让用户自定义查看的数据量,提升用户体验。

  3. 异步加载:对于需要长时间计算或加载外部数据的操作,可以考虑使用 Streamlit 的异步功能,避免阻塞主线程。

5.3 用户界面和体验

  1. 清晰的导航:如果应用有多个功能或页面,确保用户能方便地在不同功能间导航。可以使用侧边栏、标签页或面包屑导航等方式,提升用户的使用体验。

  2. 适当的反馈:针对用户的操作提供实时反馈,例如在文件上传、数据计算等操作时显示加载动画或提示信息,让用户了解当前操作状态。

  3. 自定义主题:通过使用 .streamlit/config.toml 文件自定义应用主题,使得应用在视觉上更加吸引人,也能与品牌形象保持一致。

5.4 安全与权限管理

  1. 数据隐私:确保用户上传的数据不会被恶意使用,避免在应用中存储敏感信息。可以考虑对用户输入的数据进行验证和清理,确保应用的安全性。

  2. 权限控制:如果应用需要限制某些功能或数据的访问,可以通过用户身份验证机制来管理用户权限,确保数据安全。

5.5 定期更新与维护

  1. 文档与注释:为代码添加注释,编写文档,说明应用的功能和使用方法。这对于后续的维护和其他开发者的理解都非常重要。

  2. 定期更新依赖:定期检查和更新应用的依赖库,确保使用最新的版本以获得更好的性能和安全性。

六、总结

Streamlit 是一个强大的工具,可以帮助数据科学家和开发者快速构建交互式数据应用。在本文中,我们详细探讨了 Streamlit 的基础用法、进阶功能、最佳实践和应用开发过程中需要注意的事项。

6.1 主要内容回顾

  • 入门概述:Streamlit 的设计目标是简化数据应用的开发,使得数据科学家能够更专注于数据分析而无需深入学习前端技术。
  • 构建第一个应用:通过简单的实例,我们演示了如何创建一个基本的 Streamlit 应用,并展示了如何添加交互组件和数据可视化。
  • 进阶功能:我们探讨了文件上传与下载、状态管理、性能优化等功能,这些特性使得 Streamlit 应用更加灵活和强大。
  • 最佳实践:通过遵循代码组织、性能优化、用户体验、安全性和维护性等最佳实践,可以提高应用的质量和可用性。

6.2 未来展望

随着数据科学和机器学习的不断发展,Streamlit 作为一个开源项目,未来将会有更多的功能和优化推出。保持对 Streamlit 和其社区动态的关注,可以帮助你及时掌握新技术和新特性。同时,鼓励你在实际项目中不断实践和探索,利用 Streamlit 的强大能力,构建出创新且有价值的数据应用。

总的来说,通过本篇文章的学习,希望你能对 Streamlit 有一个全面的认识,掌握其基本和进阶用法,从而在实际工作中得心应手地使用这一工具,推动数据科学项目的成功实施。

相关文章:

Streamlit从入门到精通:构建数据应用的利器

在数据科学与机器学习日益普及的今天,如何快速将模型部署为可交互的应用成为了许多数据科学家的重要任务。Streamlit,作为一个开源的Python库,专为数据科学家设计,能够帮助我们轻松构建美观且直观的Web应用。本文将从入门到精通&a…...

4.1.1 类的序列化与反序列化(XmlSerializer)

本文介绍XML序列化和反序列化操作 本例子中被序列化的类(Devices)中有一个List,其元素类型为:DigitalInputInfo. 序列化以及反序列化都很简单: 序列化:即把类的对象输出到文件中。 StreamWriter streamWriter new StreamWriter(filePath); …...

新增优惠券

文章目录 概要整体架构流程技术细节小结 概要 接口分析 一个基本的新增接口,按照Restful风格设计即可,关键是请求参数。之前表分析时已经详细介绍过这个页面及其中的字段,这里不再赘述。 需要特别注意的是,如果优惠券限定了使…...

Qt 处理 XML 数据

在 Qt 中,处理 XML 数据通常使用 Qt 提供的 QDomDocument、QXmlStreamReader 和 QXmlStreamWriter 类。这些类可以帮助你读取、修改和写入 XML 数据。 1. 使用 QDomDocument 处理 XML QDomDocument 提供了对 XML 文档的 DOM(Document Object Model&…...

STM32F407使用ESP8266实现阿里云OTA(下)

文章目录 前言一、函数分析1.get_bin()函数2.download_bin()函数3.串口1中断函数二、完整工程分析前言 从上一章中,我们已经成功连接阿里云并且成功拿到了升级包的下载地址,在本文我们将升级包下载下来并且存储到SD卡中,最终将程序写入FLASH中完成APP的跳转,至此我们的OTA…...

树型结构(知识点梳理及例题精讲)

大家好啊,这一集,我们来学习树型结构,请确保看完预习篇,再来看此篇哦 树型结构(预习课)-CSDN博客 话不多说,直接开讲 -------------------------------------------------------分割线-------…...

使用HYPRE库并行装配IJ稀疏矩阵指南: 矩阵预分配和重复利用

使用HYPRE库并行装配IJ稀疏矩阵指南 HYPRE是一个流行的并行求解器库,特别适合大规模稀疏线性系统的求解。下面介绍如何并行装配IJ格式的稀疏矩阵,包括预先分配矩阵空间和循环使用。 1. 初始化矩阵 首先需要创建并初始化一个IJ矩阵: #incl…...

win11什么都不动之后一段时间黑屏桌面无法显示,但鼠标仍可移动,得要熄屏之后才能进入的四种解决方法

现象: 1. 当时新建运行的资源管理器的任务卡了或者原本资源管理器卡了 比如:当时在文本框中输入explorer 注:explorer.exe是Windows的文件资源管理器,它用于管理Windows的图形外壳,包括桌面和文件管理 按住CtrlAltEs…...

C语言编程--15.四数之和

题目: 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复)&…...

从单机工具到协同平台:开源交互式模拟环境的技术演进之路

从单机工具到协同平台:开源交互式模拟环境的技术演进之路 一、引言:从“孤岛”到“生态”的模拟技术变革 二十年前,模拟软件如LAMMPS(分子动力学)、ANSYS(工程仿真)以单机版为主,用…...

Python函数与模块笔记

Python函数与模块笔记 目录 函数 无参函数带参函数变量作用域Lambda函数常用内置函数 模块与包 模块的定义与导入包的使用常用模块(keyword、random、sys、time) 一、函数 1. 无参函数 定义语法: def 函数名(): 代码块 return [表达式]…...

Jenkins:开启高效软件开发的魔法之门

一、Jenkins 是什么 Jenkins 是一款基于 Java 开发的开源持续集成工具,在软件开发流程中占据着举足轻重的地位。它的前身是 Hudson ,于 2004 年由 Sun 公司的 Kohsuke Kawaguchi 开发,2011 年因商标纠纷更名为 Jenkins。发展至今,…...

正则表达式学习指南

正则表达式学习指南 在编程的世界里,正则表达式(Regular Expressions,简称regex)是一门不可或缺的艺术,它赋予了开发者强大的文本处理能力,让看似复杂的字符串匹配和替换任务变得简单而高效。本文旨在为初…...

React-组件通信

1、父子组件通信 &#xff08;1&#xff09;父传子&#xff08;props 传值&#xff09; // 父组件 function App() {const name 张三return (<div className"App"><Son name{name} /></div>); }// 子组件 function Son(props) {return (<div…...

MuJoCo 机械臂 PPO 强化学习逆向运动学(IK)

视频讲解&#xff1a; MuJoCo 机械臂 PPO 强化学习逆向运动学&#xff08;IK&#xff09; 代码仓库&#xff1a;https://github.com/LitchiCheng/mujoco-learning 结合上期视频&#xff0c;我们安装了stable_baselines3和gym&#xff0c;今天用PPO尝试强化学习得到关节空间到达…...

代码随想录算法训练营第一天:数组part1

今日学习的文章链接和视频链接 ● 自己看到题目的第一想法 ● 看完代码随想录之后的想法 ● 自己实现过程中遇到哪些困难 ● 今日收获&#xff0c;记录一下自己的学习时长 状态 思路理解完成 30% 代码debug完成 60% 代码模板总结并抽象出来 100% 题目 704 二分查找 题目链接…...

C++学习:六个月从基础到就业——STL算法(二)排序与变序算法

C学习&#xff1a;六个月从基础到就业——STL算法&#xff08;二&#xff09;排序与变序算法 本文是我C学习之旅系列的第二十六篇技术文章&#xff0c;也是第二阶段"C进阶特性"的第四篇&#xff0c;主要介绍C STL算法库中的排序和变序算法。查看完整系列目录了解更多…...

JVM性能优化之年轻代参数设置

一、引言 在Java应用开发中&#xff0c;性能问题往往是最难预测却又最影响用户体验的关键因素。即便代码逻辑完美&#xff0c;若JVM&#xff08;Java虚拟机&#xff09;配置不当&#xff0c;也可能导致频繁GC停顿、内存泄漏&#xff0c;甚至引发系统崩溃。JVM性能优化并非简单…...

A*迷宫寻路

二、实验内容 以寻路问题为例实现A*算法的求解程序&#xff0c;设计两种不同的估价函数&#xff1a; 1.设置两种地图&#xff1a; 根据题意&#xff0c;用矩阵设置两个地图。 地图1&#xff1a;设置5行5列的迷宫&#xff0c;代码如下&#xff1a; 地图2&#xff1a;设置20行…...

秒出PPT推出更强版本,AI PPT工具进入新纪元!

在现代职场中&#xff0c;PPT是我们沟通和展示信息的重要工具。无论是做产品演示&#xff0c;还是准备工作汇报&#xff0c;一份精美的PPT能大大提升演示效果。然而&#xff0c;传统的PPT制作往往需要消耗大量时间&#xff0c;尤其是在排版、设计和内容调整上。如今&#xff0c…...

electron-updater实现自动更新

electron-updater 是一个专为 Electron 应用设计的自动更新工具&#xff0c;能够帮助开发者轻松实现跨平台的自动更新功能。它支持 Windows、macOS 和 Linux 系统&#xff0c;通过简单的配置即可集成到 Electron 应用中&#xff0c;自动检查应用的最新版本并在后台完成更新。el…...

Ubuntu22学习记录

Ubuntu22学习记录 虚拟机挂载共享文件夹离线安装.net core3.1离线安装mysql离线安装supervisor离线安装nginx开机自启 虚拟机挂载共享文件夹 sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other 挂载路径&#xff1a;/mnt/hgfs/离线安装.net core3.1 离线安装mysql 离线安装…...

【MinerU】:一款将PDF转化为机器可读格式的工具——RAG加强(Docker版本)

目录 创建容器 安装miniconda 安装mineru CPU运行 GPU加速 多卡问题 创建容器 构建Dockerfile文件 开启ssh服务&#xff0c;设置密码为1234等操作 # 使用官方 Ubuntu 24.04 镜像 FROM ubuntu:24.04# 安装基础工具和SSH服务 RUN apt-get update && \apt-get ins…...

leetcode 69和367

69. Sqrt(x) 代码&#xff1a; class Solution { public:int mySqrt(int x) {int left 0;int right x;long long mid 0;int res 0;long long temp 0;while(left < right){mid left ((right - left)>>1);temp mid*mid;if(temp x){res mid;break;}else if(te…...

# 代码随想录算法训练营Day37 | Leetcode300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组

代码随想录算法训练营Day37 | Leetcode300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组 一、最长递增子序列 相关题目&#xff1a;Leetcode300 文档讲解&#xff1a;Leetcode300 视频讲解&#xff1a;Leetcode300 1. Leetcode300.最长递增子序列 给你一个整数数…...

中小企业技术跃迁:云原生后端如何实现高效低成本系统建设

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:技术变革的“门槛”能否被跨越? 过去十年,云计算与容器化技术飞速发展,互联网巨头纷纷构建自己的云原生基础设施,实现系统模块化、弹性伸缩、自动化运维。然而,中小企业在这股浪潮中…...

系统架构师2025年论文《系统架构风格2》

论软件系统架构风格 摘要: 某市医院预约挂号系统建设推广应用项目是我市卫生健康委员会 2019 年发起的一项医疗卫生行业信息化项目,目的是实现辖区内患者在辖区各公立医疗机构就诊时,可以通过多种线上渠道进行预约挂号。我作为系统架构师参与此项目。本文围绕软件系统架构…...

Java面试实战:电商场景下的Spring Cloud微服务架构与缓存技术剖析

第一轮提问 面试官: 谢飞机&#xff0c;我们先从基础问题开始。请问你知道Spring Boot和Spring Cloud的区别吗&#xff1f; 谢飞机: 当然知道&#xff01;Spring Boot主要用于快速构建独立运行的Spring应用&#xff0c;而Spring Cloud则是在Spring Boot的基础上实现分布式系统…...

快速配置linux远程开发-go语言

1.go安装包安装 2.go env 配置 go env -w GO111MODULEon go env -w GOPROXYxx go env -w GOSUMDBoff go env -w GOPRIVATExx 3.复制linux公钥到gitlab中&#xff0c;用于通过ssh免密拉取gitlab项目 ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 4.设置…...

C++23文本编码革新:迈向更现代的字符处理

文章目录 一、字符集与编码&#xff08;P2314R4&#xff09;二、统一的字符字面量编码&#xff08;P2316R2&#xff09;三、具名通用字符转义&#xff08;P2071R2&#xff09;四、带分隔的转义序列&#xff08;P2290R3&#xff09;五、支持UTF-8作为可移植源文件编码&#xff0…...

CentOS系统中MySQL安装步骤分享

在 CentOS 系统上安装 MySQL&#xff0c;需要依次进行环境检查、软件源配置、安装 MySQL、启动服务等操作。我将按照规范流程&#xff0c;为你详细分享完整且具体的安装步骤。 在 CentOS 系统中安装 MySQL 数据库&#xff0c;能够为各类应用提供高效稳定的数据存储和管理服务。…...

【产品经理从0到1】Axure介绍

01. 上期内容回顾 创建元件库的时候&#xff0c;在添加原件时不知道怎么操作。讲解很耐心&#xff0c;希望课上分解步骤多带着练习下&#xff1b;PC 端的原型&#xff0c;相对于移动端&#xff0c;非常自由&#xff0c;没有任何的设计规范&#xff1b;但是&#xff0c;要求 PC…...

30天通过软考高项-第二天

30天通过软考高项-第二天 任务&#xff1a;项目立项管理、项目整合管理 思维导图阅读 知识点记忆 章节习题练习 知识点练习 手写回忆ITTO 立项管理-背 1. 项目可研的5个方面 基金社运法 技术可行性、经济可行性、社会效益可行性、运行环境可行性、其他&#xff08;法律、政…...

yt-dlp 下载时需要 cookie

下载 b 站 歌曲 yt-dlp -x --proxy http://127.0.0.1:1080 --audio-format mp3 https://www.bilibili.com/video/BV1Zn4y1X75b解决方案&#xff0c;使用 firefox 登录相关网站 yt-dlp -o "downloads/%(title)s.%(ext)s" -f "bestvideo[height<1080]bestaud…...

快速上手GO的net/http包,个人学习笔记

更多个人笔记&#xff1a;&#xff08;仅供参考&#xff0c;非盈利&#xff09; gitee&#xff1a; https://gitee.com/harryhack/it_note github&#xff1a; https://github.com/ZHLOVEYY/IT_note 针对GO中net/http包的学习笔记 基础快速了解 创建简单的GOHTTP服务 func …...

Flask + ajax上传文件(二)--多文件上传

Flask多文件上传完整教程 本教程将详细介绍如何使用Flask实现多文件上传功能,并使用时间戳为上传文件自动命名,避免文件名冲突。 一、环境准备 确保已安装Python和Flask pip install flask项目结构 flask_upload/ ├── app.py ├── upload/ # 上传文…...

sysstat介绍以及交叉编译

文章目录 1. 工具集介绍2. 指令使用参考3. 交叉编译3.1 源码下载3.2 编译步骤 4. 工具验证4.1 将相关工具导入到设备4.2 功能验证 1. 工具集介绍 Sysstat 是一个功能强大的 Linux 系统性能监控工具包&#xff0c;提供实时监控和历史数据分析功能&#xff0c;帮助管理员优化系统…...

常见正则表达式整理与Java使用正则表达式的例子

一、常见正则表达式整理 1. 基础验证类 邮箱地址 ^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\\.[a-zA-Z]{2,}$ &#xff08;匹配如 userexample.com&#xff09;手机号 ^1[3-9]\\\\d{9}$ &#xff08;匹配国内11位手机号&#xff0c;如 13812345678&#xff09;中文字符 ^[\u4e00-\u9fa5…...

UE5 Assimp 自用

记录一下配assimp库到ue中的过程。因为想在ue里面实现一些几何处理(虽然ue好像有相关的geo的代码&#xff09;&#xff0c;遂配置了一下assimp。 1. 编译整理生成自己所需要的文件。cmake编译&#xff0c;下载github 的官方的assimp-master&#xff0c;然后cmake都是默认的就行…...

java—12 kafka

目录 一、消息队列的优缺点 二、常用MQ 1. Kafka 2. RocketMQ 3. RabbitMQ 4. ActiveMQ 5. ZeroMQ 6. MQ选型对比 适用场景——从公司基础建设力量角度出发 适用场景——从业务场景角度出发 四、基本概念和操作 1. kafka常用术语 2. kafka常用指令 3. 单播消息&a…...

VS Code 智能代理模式:重塑开发体验

在编程领域&#xff0c;效率与精准度无疑是开发者们永恒的追求。而如今&#xff0c;VS Code 推出的智能代理模式&#xff08;Agent Mode&#xff09;&#xff0c;正以前所未有的方式&#xff0c;彻底颠覆了传统开发流程&#xff0c;为程序员们带来了一场前所未有的效率革命。本…...

基于深度学习和单目测距的前车防撞及车道偏离预警系统

随着人工智能与计算机视觉技术的飞速发展,高级驾驶辅助系统(ADAS)已成为现代汽车智能化的关键标志。它不仅能有效提升行车安全,还能为自动驾驶时代的全面到来奠定坚实基础。本文深入剖析一套功能完备、基于深度学习模型的 ADAS 系统的架构与核心实现,带您领略智能驾驶背后…...

第二篇:Django配置及ORM操作

第二篇&#xff1a;Django配置及ORM操作 文章目录 第二篇&#xff1a;Django配置及ORM操作一、静态文件配置1、为什么要配置静态文件&#xff1f;2、如何配置静态文件&#xff1f;3、静态文件动态解析4、form表单默认是get请求数据 二、request对象方法初识三、pycharm链接数据…...

亚马逊英国站FBA费用重构:轻小商品迎红利期,跨境卖家如何抢占先机?

一、政策背景&#xff1a;成本优化成平台与卖家共同诉求 2024年4月&#xff0c;亚马逊英国站&#xff08;Amazon.co.uk&#xff09;发布近三年来力度最大的FBA费用调整方案&#xff0c;标志着英国电商市场正式进入精细化成本管理时代。这一决策背后&#xff0c;是多重因素的叠…...

算法时代的“摩西十诫”:AI治理平台重构数字戒律

一、引言 数字时代的狂飙突进中&#xff0c;人工智能&#xff08;AI&#xff09;正以颠覆性的力量重塑人类社会。从医疗诊断到金融决策&#xff0c;从智能制造到舆论传播&#xff0c;AI的触角已延伸至每个角落。 然而&#xff0c;斯坦福大学《2024年人工智能指数报告》揭示的…...

Kafka的ISR机制是什么?如何保证数据一致性?

一、Kafka ISR机制深度解析 1. ISR机制定义 ISR&#xff08;In-Sync Replicas&#xff09;是Kafka保证数据一致性的核心机制&#xff0c;由Leader副本&#xff08;复杂读写&#xff09;和Follower副本(负责备份)组成。当Follower副本的延迟超过replica.lag.time.max.ms&#…...

Flink 消费 Kafka 数据流的最佳实践

一、前言&#xff1a;Kafka 只是开始&#xff0c;消费才是关键 Kafka 提供了优雅的 Topic 管理与消息缓冲机制&#xff0c;但只有当 Flink 能稳定、有序、无数据丢失地消费并处理这些数据流&#xff0c;实时数仓系统才真正发挥作用。 本篇将围绕 Flink 如何“吃好” Kafka 数据…...

UEC++第10天|UEC++获取对象、RTTI是C++

最近在写UEC项目&#xff0c;这里写几个案例里的问题&#xff0c;还在学习阶段 1. 如何获取小鸟对象&#xff1f; void AFlappyBirdGameModeBase::BeginGame() { // 让管道动起来PipeActor->SetMoveSpeed();// 让小鸟开始飞行// 如何获取到小鸟对象APawn* Pawn UGameplayS…...

原生微信小程序,canvas生成凭证,保存到手机

原生微信小程序通过canvas可以将表单( 文本、图片 )转化成图片&#xff0c;同时添加水印&#xff0c;生成凭证&#xff0c;这里只是基本功能实现。可以继续完善和扩展。 <view class"container"><!-- Canvas 组件 --><canvas type"2d" id&…...

如何轻松将 Python 英文版切换至中文界面

Python 是一种广泛使用的编程语言&#xff0c;尤其在数据科学、人工智能和网络开发等领域。在最近的 Python 版本中&#xff0c;用户可以方便地使用多种语言&#xff0c;这也包括将 Python 界面语言从英文切换至中文。这不仅是出于用户体验的考虑&#xff0c;也能帮助初学者更快…...