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

人工智能 Day06 pandas库进阶

1.处理缺失数据

总体流程是这样的,

 归根在于如何处理NAN,接下来详细赘述

1.1. 处理缺失值的相关函数
  • 判断缺失值
    • pd.isnull(df):用于判断 DataFrame df 中的元素是否为缺失值(NaN ),返回一个与df 形状相同的布尔型 DataFrame,元素为True 表示对应位置是缺失值。
    • pd.notnull(df):与pd.isnull(df) 相反,判断 DataFrame df 中的元素是否不是缺失值,返回布尔型 DataFrame,元素为True 表示对应位置不是缺失值 。
    • 之后利用np.all()或者np.any就可以知道数据中是否存在NaN。
  • 删除缺失值
    • dropna(axis='rows'):用于删除存在缺失值的行(当axis='rows' 时 )或列(当axis='columns' 时 )。默认axis='rows' ,不会修改原数据,需要接收返回值。例如new_df = df.dropna() ,将返回删除缺失值行后的新 DataFrame。
  • 填充缺失值
    • fillna(value, inplace=False):用指定的value 填充缺失值。inplace=False (默认 )时,不修改原数据,返回填充后的新对象;inplace=True 时,直接在原数据上进行填充修改。例如df.fillna(0, inplace=True) ,将把df 中的缺失值都填充为 0 。
  • 替换数据
    • replace(to_replace, value):用于替换数据。to_replace 是要被替换的值,value 是替换后的值。例如df.replace('?', np.nan) ,将把df 中所有的'?' 替换为NaN 。
1.2. 电影数据的缺失值处理示例
  • 判断缺失值是否存在
import pandas as pd
# 读取电影数据
movie = pd.read_csv("./data/IMDB-Movie-Data.csv")
# 使用pd.notnull判断
not_null_result = pd.notnull(movie)
#返回一个和movie的shape一样的数组,全是布尔型,True为不空,False为空,
#只要结合np.all即可判断是否有空,如果有就是返回False
np.all(not_null_result)
# 使用pd.isnull判断#另一种方法
is_null_result = pd.isnull(movie)
#返回一个和movie的shape一样的数组,全是布尔型,True为不空,False为空,
#只要结合np.any即可判断是否有空,如果有就是返回True
  • 存在缺失值且为np.nan时的处理
    • 删除缺失值
# 不修改原数据
new_movie = movie.dropna()
# 也可重新赋值给原变量
movie = movie.dropna()
  • 填充缺失值
# 填充'Revenue (Millions)'列的缺失值为该列均值
movie['Revenue (Millions)'].fillna(movie['Revenue (Millions)'].mean(), inplace=True)
# 遍历填充所有存在缺失值的列
for i in movie.columns:if np.all(pd.notnull(movie[i])) == False:movie[i].fillna(movie[i].mean(), inplace=True)
  • 缺失值不是np.nan时的处理
import pandas as pd
import numpy as np
# 读取数据(假设数据中有'?'表示缺失值)
wis = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer")
# 替换'?'为np.nan
wis = wis.replace(to_replace='?', value=np.nan)
# 后续再进行缺失值填充等操作,例如填充某列缺失值为均值
wis['column_name'].fillna(wis['column_name'].mean(), inplace=True)
1.3. 处理缺失值的步骤总结
  1. 统一缺失值形式:若存在缺失值但不是np.nan 的形式,使用data.replace(to_replace, value=np.nan) 将其替换为np.nan 。
  2. 判断是否存在缺失值:使用np.all(pd.notnull(data)) ,若结果为True ,表示不存在缺失值,不做处理;若为False ,表示存在缺失值,继续下一步。
  3. 填充缺失值:使用统计学指标值(如均值mean、中位数median等 )对缺失值进行填充,如data['column_name'].fillna(data['column_name'].mean(), inplace=True) 。

2.数据的离散化

2.1. 为什么要离散化

连续属性离散化目的是简化数据结构,减少给定连续属性值个数,常作为数据挖掘工具。比如在分析用户年龄与消费习惯时,年龄是连续属性,将年龄离散化为儿童、青年、中年、老年等区间,可更方便分析不同年龄段消费特征。

2.2. 什么是数据的离散化

连续属性离散化是在连续属性值域上划分若干离散区间,用不同符号或整数值代表落在各子区间的属性值。例如原始身高数据 165, 174, 160, 180, 159, 163, 192, 184 ,按 150 - 165, 165 - 180, 180 - 195 划分区间,可标记为矮、中、高类别。

2.3. 具体实现
  • 读取股票数据
import pandas as pd
# 读取股票数据
data = pd.read_csv("./data/stock_day.csv")
# 筛选出p_change数据
p_change = data['p_change']

此代码先读取股票 CSV 文件数据,再提取出涨跌幅数据p_change ,为后续离散化操作准备数据。

  • 将股票涨跌幅数据进行分组
    • 等频分组(qcut )
# 自行分组,将数据分为10组
qcut = pd.qcut(p_change, 10)
# 计算分到每个组数据个数
qcut.value_counts()

pd.qcut(data, q)中,data是要分组的数据(这里是p_change ),q是要划分的组数(这里为 10 ),它会使每组数据数量尽量相等。value_counts()用于统计每组数据个数,经常结合离散化一起使用

  • 自定义区间分组(cut )
# 自己指定分组区间
bins = [-100, -7, -5, -3, 0, 3, 5, 7, 100]
p_counts = pd.cut(p_change, bins)

pd.cut(data, bins)中,data是数据,bins是自定义区间边界列表(这里bins指定了具体区间 ),按此区间对数据进行分组。也经常结合value_counts()一起使用。

现在我们就通过统计个数得到了一下形式

接下来为了精准的表示每个样本在那个区间可以使用一下编码(one-hot/哑变量)

  • 股票涨跌幅分组数据变成 one - hot 编码
    • one - hot 编码概念:把每个类别生成一个布尔列,每个样本只有一列取值为 1 ,其他为 0 ,又称热编码。例如类别有 Human、Penguin、Octopus、Alien ,编码后每个样本对应这些类别列,只有所属类别列值为 1 。这样又多了四个特征,每个样本表示唯一。
    • 实现代码
# 得出one-hot编码矩阵
dummies = pd.get_dummies(p_counts, prefix="rise")

pandas.get_dummies(data, prefix=None)中,data可以是类似数组、Series 或 DataFrame(这里是分组后的p_counts ),prefix是分组名字(这里为rise ),生成 one - hot 编码矩阵,方便后续机器学习模型处理。这是最后结果。

3.数据的合并

如果数据由多张表构成,需要进行数据合并

1. pd.concat实现数据合并
  • 函数语法及参数
    pd.concat(objs, axis=0, join='outer', ignore_index=False)
    • objs:必填参数,是一个由 DataFrame 或 Series 组成的列表,如[data1, data2] ,表示要合并的对象。
    • axis:可选参数,用于指定合并的轴方向。axis=0(默认值)表示按列索引合并(纵向合并 ),即上下拼接;axis=1表示按行索引合并(横向合并 ),即左右拼接。
    • join:可选参数,指定合并时的连接方式,有'outer'(默认值,取并集 )和'inner'(取交集 )两种。
    • ignore_index:可选参数,布尔值,默认为False 。若为True ,合并后将重新生成行索引。
  • 代码示例
2. pd.merge实现数据合并
  • 函数语法及参数
    pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None)
    • left:必填参数,第一个 DataFrame。
    • right:必填参数,第二个 DataFrame。
    • how:可选参数,指定连接方式,常见取值有:
      • 'inner':内连接(默认值),使用左右 DataFrame 键的交集。
      • 'left':左连接,使用左 DataFrame 的键。
      • 'right':右连接,使用右 DataFrame 的键。
      • 'outer':外连接,使用左右 DataFrame 键的并集。
    • on:可选参数,指定用于合并的共同键列。要求左右 DataFrame 都存在该列
    • left_on:可选参数,指定左 DataFrame 用于合并的键列。
    • right_on:可选参数,指定右 DataFrame 用于合并的键列。
  • 代码示例
import pandas as pd
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],'key2': ['K0', 'K1', 'K0', 'K1'],'A': ['A0', 'A1', 'A2', 'A3'],'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],'key2': ['K0', 'K0', 'K0', 'K0'],'C': ['C0', 'C1', 'C2', 'C3'],'D': ['D0', 'D1', 'D2', 'D3']})
# 默认内连接
result_inner = pd.merge(left, right, on=['key1', 'key2'])
# 左连接
result_left = pd.merge(left, right, how='left', on=['key1', 'key2'])
# 右连接
result_right = pd.merge(left, right, how='right', on=['key1', 'key2'])
print("内连接结果:\n", result_inner)
print("左连接结果:\n", result_left)
print("右连接结果:\n", result_right)

此代码先创建了两个 DataFrame left 和right ,然后分别展示了内连接、左连接和右连接的合并结果。

拓展一下连接:

其实和数据库的一样,内连接就是筛选数据,没有相同的键值的数据被排除

外连接就是分别遍历左右表,如果另一个表有相同的键值的全部列出来,直到左右两表被全部遍历完。左连接和右连接其实是特殊的外连接,就是只遍历左表或者右表。

4.交叉表和透视表(交叉表是一列特征在另一列特征上的数量,透视表是占比但其实进过计算交叉表除以和还是透视表) 

 案例分析

1 数据准备
  • 提取日期对应的星期数
import pandas as pd
import numpy as np
# 假设data是包含股票数据的DataFrame,其索引为日期
date = pd.to_datetime(data.index).weekday
data['week'] = date

pd.to_datetime() 将索引的日期字符串转换为日期时间格式,.weekday 方法获取对应的星期数(0 代表星期一,1 代表星期二,以此类推 ),并将其作为新列week 添加到data 中。

内容拆解:

47行数据不可以用,所以要转化为可以使用的数据,接下来就可以取出对应的年月日了

  • 将涨跌幅数据分类
data['posi_neg'] = np.where(data['p_change'] > 0, 1, 0)

np.where() 函数根据条件判断,当data['p_change'] 大于 0 时,对应位置赋值为 1 (代表涨幅为正 ),否则赋值为 0 (代表涨幅为负或持平 ),并将结果存储在新列posi_neg 中,用来形成交叉表。

  • 交叉表计算
count = pd.crosstab(data['week'], data['posi_neg'])

pd.crosstab() 函数根据data['week'] 和data['posi_neg'] 生成交叉表,统计每个星期数下涨跌幅为正(1 )和为负或持平(0 )的天数。

结果为现在就是交叉表了,我们展示占比(也就是透视表)

  • 计算比例
sum = count.sum(axis=1).astype(np.float32)
pro = count.div(sum, axis=0)

count.sum(axis=1) 计算交叉表中每一行(每个星期数 )的总数,.astype(np.float32) 将数据类型转换为 32 位浮点数。count.div(sum, axis=0) 进行除法运算,axis=0 表示按列方向,将交叉表的每一列除以对应的行总数,得到每个星期数下涨跌幅为正和为负或持平的比例。pro如下图:

2 查看效果
import matplotlib.pyplot as plt
pro.plot(kind='bar', stacked=True)
plt.show()

pro.plot(kind='bar', stacked=True) 使用matplotlib 库绘制堆叠柱状图,kind='bar' 指定为柱状图类型,stacked=True 表示堆叠显示,便于直观对比每个星期数下涨跌幅正负的比例情况。plt.show() 显示绘制的图形。如下图

 如不堆叠显示,图会如下:

3.其实我们可以直接得到一列数据的占比,使用透视表即可:

2.3 使用pivot_table(透视表)实现

  • 函数语法及参数
    pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False)
    • data:必填参数,为要操作的 DataFrame 对象,这里是包含股票数据及相关衍生列(如weekp_n等 )的data 。
    • values:可选参数,接收列名组成的列表,指定要进行聚合计算的列。这里['posi_neg']["p_n"] 表示对涨跌幅正负标记列进行操作。
    • index:可选参数,指定用于分组的索引列,这里'week' 表示按星期数分组。
    • columns:可选参数,用于指定列分组依据,若不指定则不进行列方向分组。
    • aggfunc:可选参数,默认'mean' ,用于指定聚合函数。常见的有'sum'(求和)、'count'(计数)等。这里默认求均值,对于 0 和 1 组成的涨跌幅正负标记列,均值就相当于涨幅为正的比例。
    • fill_value:可选参数,用于指定填充缺失值的值。
    • margins:可选参数,布尔值,默认为False ,若为True 会添加总计行和总计列。
  • 代码示例
import pandas as pd
# 假设data是包含股票数据及相关衍生列(如week、p_n等)的DataFrame
result = data.pivot_table(["p_n"], index="week")
print(result)

此代码通过pivot_table 函数,以week 列为索引,对p_n 列(涨跌幅正负标记列 )进行聚合操作(默认求均值 ),直接得到每个星期数下涨幅为正的比例,相较于之前交叉表计算等步骤更为简洁。结果如下:

5.分组与聚合(两个类似于数据库,经常结合在一起使用,只有分组没有聚合只会返回一个对象没有意义。)

一个简单的图:

分组 API

DataFrame.groupby函数
  • 函数语法及参数
    DataFrame.groupby(key, as_index=True)
    • key:必填参数,用于指定分组的列数据,可以是单个列名,也可以是列名组成的列表。比如['color'] ,表示按color列进行分组。
    • as_index:可选参数,布尔值,默认为True 。当as_index=True 时,分组的键(这里是color列的值 )会作为结果的索引;当as_index=False 时,分组的键会作为结果的一列保留,数据结构保持不变。
  • 案例讲解
    • 数据准备
import pandas as pd
col = pd.DataFrame({'color': ['white','red', 'green','red', 'green'],'object': ['pen', 'pencil', 'pencil', 'ashtray', 'pen'],'price1': [5.56, 4.20, 1.30, 0.56, 2.75],'price2': [4.75, 4.12, 1.60, 0.75, 3.15]})

此代码创建了一个 DataFrame col ,包含color(颜色)、object(物品)、price1price2(价格)四列数据。

  • 分组聚合操作
    • as_index=True 情况(默认 )
# 分组,求平均值
col.groupby(['color'])['price1'].mean()
col['price1'].groupby(col['color']).mean()

这两种写法等价,都是按color列对price1列进行分组并求平均值。运行后,color列的值作为索引,得到不同颜色对应的price1平均值:

color
green    2.025
red      2.380
white    5.560
Name: price1, dtype: float64
  • as_index=False 情况
col.groupby(['color'], as_index=False)['price1'].mean()

此代码按color列对price1列进行分组并求平均值,同时设置as_index=False ,此时color列作为结果的一列保留,得到:

  color  price1
0 green  2.025
1   red  2.380
2 white  5.560

通过groupby函数结合聚合函数(如mean ),可以方便地对数据进行分组聚合操作,分析不同组别的数据特征 。

为什么要在group后边加上具体的列呢?

明确聚合对象

groupby 函数实现分组后,需要对特定的列进行聚合计算(这里是求平均值,使用mean 函数 )。col 这个 DataFrame 可能包含多列数据(如案例中还有objectprice2 等列 ),通过指定['price1'] ,就明确告诉程序是要对price1 这一列的数据进行聚合操作。如果不指定,程序就不知道具体要对哪列数据进行后续的聚合计算,会引发错误。

符合逻辑操作流程

分组聚合操作的逻辑是先分组,然后对组内的某列或某些列数据进行聚合。比如在这个案例中,我们想知道不同颜色对应的price1 价格的平均值,所以要指定price1 列。如果我们想分析price2 列,就需要指定['price2'] ,如col.groupby(['color'])['price2'].mean() 。

注意,仔细观察两种方法的不同之处,group里的代码一个直接用列名一个不能:

col['price1'].groupby(col['color']).mean() 这种针对 Series 对象进行groupby 操作的情境下,不能直接用列名。

因为col['price1'] 已经是一个 Series 对象,当对它调用groupby 方法时,groupby 函数期望传入一个与该 Series 长度一致的可迭代对象(通常也是一个 Series )来确定分组规则。如果直接写列名,比如col['price1'].groupby('color').mean() ,程序会报错,因为'color' 只是一个字符串,不是与col['price1'] 长度相同的可迭代对象,无法明确分组逻辑。

 

而在基于 DataFrame 进行groupby 操作时,像col.groupby(['color'])['price1'].mean() ,可以直接用列名(以列表形式 )来指定分组依据,这是因为 DataFrame 的groupby 方法有相应的机制去识别和处理列名列表作为分组键

当group中分组依据是一个列表的时候就好像是先按第一个分,然后一次分组:

首先这张图,表示了如果使用汇总聚合函数,并不需要指定列,因为只是统计个数的话不需要明确。

第二展示了列表分组规律

6.整体电影数据案例

关于问题1 很简单

关于问题2:

因为只用pandas绘图简单无法进行刻度的设置,注意这里数据是加了.values,因为如果不加他是一个series的格式,这样有索引,你需要用值所以是.values所以需要用matplotlib进行绘图结果如下:

 但是发现刻度不对,我们需要对上,所以可以将数据的max与min之间的数分21个(因为是设置了20组,需要21个数),用linspace生成等距的数即可。

关于问题3 

我们首先要知道所有电影的种类(因为每个电影种类很多且有重复,可以使用unique来进行去重)

接着生成一个全0列表行数为电影数列数为电影种类,之后我们可以循环每个电影对应的种类,如果是某个类型即为1,最后按列求和就可以知道具体有多少了

解释一下那个分割:首先如果不用按逗号分割列表里每个元素是这样的:

类型之间按逗号分割

所以要按逗号分割于是可以单独提出类型列表,因为i.split返回值就是列表,所以组成了列表嵌套

之后使用双循坏就可以取出每个值了,然后在去重即可,如下图:

然后生成一个按电影为行,按类型为列的dataframe即可

之后循坏完毕按列求和即可

之后排序绘图即可

相关文章:

人工智能 Day06 pandas库进阶

1.处理缺失数据 总体流程是这样的, 归根在于如何处理NAN,接下来详细赘述 1.1. 处理缺失值的相关函数 判断缺失值 pd.isnull(df):用于判断 DataFrame df 中的元素是否为缺失值(NaN ),返回一个与df 形状相同…...

C# --- LINQ

C# --- LINQ 什么是LINQFluent Syntax 和 SQL-Like QueryLINQ Operations 什么是LINQ LINQ的全称为Language Integrated Query, 为各种查询(包括对象查询,数据库查询,XML查询) 提供了统一模型.LINQ源于SQL,但比SQL更加强大,更加灵…...

C语言之 条件编译和预处理指令

条件编译 在编译⼀个程序的时候我们如果要将⼀条语句(⼀组语句)编译或者放弃是很⽅便的。因为我们有条件编译指令。 ⽐如说: 调试性的代码删除可惜,保留⼜碍事,所以我们可以选择性的编译。 #define M 1 int main() …...

JVM常用概念之锁省略

问题 synchronized(同步-重量级锁)会解除所有编译器优化吗? 基础知识 使用当前的 Java 内存模型,未观察到的锁不一定会产生任何内存效应。除其他情况外,这意味着对非共享对象进行同步是徒劳的,因此运行时不必在那里做任何事情。这给编译优…...

[网络][tcp协议]:tcp报头

tcp(传输控制协议)是一种面向字节流的传输层协议,相较于udp协议,tcp能保证传输数据的可靠性与准确性,tcp也是目前最常见的传输层协议 本文主要介绍tcp报头各个字段的含义与用途 注:保留6位和6位标记位是目前最普遍的写法,在我查资料时,发现有一些拓展情况,会在后文细说 最简单的…...

传输层自学

传输实体:完成传输层任务的硬件或软件 可能位于: 操作系统内核独立的用户进程绑定在网络应用中的链接库网络接口卡 1.功能: 网络层与传输层作用范围比较? 网络层负责把数据从源机送达到目的机 传输层负责把数据送达到具体的应…...

FFmpeg —— 各系统下ffmpeg硬件加速和API支持情况(文内表格形式详细阐述)

介绍 FFmpeg 作为一款功能强大的多媒体处理工具,支持多种硬件加速技术,能够显著提升视频编解码的效率,尤其是在处理高分辨率、高码率视频时表现尤为突出。不同操作系统下,FFmpeg 的硬件加速实现方式和支持的 API 各有特点。 在 Windows 系统上,FFmpeg 主要依赖 DirectX Vi…...

RUOYI框架在实际项目中的应用二:Ruoyi前后端分离版本

如需观看Ruoyi框架的整体介绍,请移步:RUOYI框架在实际项目中的应用一:ruoyi简介 一、Ruoyi前后端分离版本-RuoYi-Vue 1、官方资料 1:代码地址:https://gitee.com/y_project/RuoYi-Vue.git 2:文档介绍地址…...

2.12[A]distribute sys

在分布式训练中,特别是使用3D并行(数据并行、流水线并行和模型并行)时,不同阶段的GPU可能因为通信或数据依赖而出现空闲时间,这些空闲时间就是所谓的“气泡”。这些气泡会降低整体的训练效率,导致GPU资源的…...

R语言的移动应用开发

R语言的移动应用开发 在数据科学和统计分析的大潮中,R语言因其强大的数据处理和可视化能力而备受青睐。然而,R语言对移动应用开发的适用性并未得到广泛关注。本文将探讨R语言在移动应用开发中的潜力及其工具,并提供一些实践示例,…...

解决 Redis 后台持久化失败的问题:内存不足导致 fork 失败

文章目录 解决 Redis 后台持久化失败的问题:内存不足导致 fork 失败问题背景与成因解决方案修改内核参数 vm.overcommit_memory增加系统内存或 Swap 空间调整 Redis 配置 stop-writes-on-bgsave-error 在 Docker 环境中的注意事项总结 解决 Redis 后台持久化失败的问…...

交换机控制软件的实现步骤猜测

一、主要目的 提出对交换机软件控制逻辑的猜测。 二、交换机控制软件的组成 (一)背景 1、交换机有很多的RJ45水晶头端口。 2、每个端口支持同时发送和接收字节数据。 3、每个端口接收的数据需要查表后才能转发给目标端口。 (二)端口状态扫描线程 负责扫描每个端口的状态&#x…...

100.HarmonyOS NEXT跑马灯组件教程:实际应用与场景示例

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT跑马灯组件教程:实际应用与场景示例 文章目录 HarmonyOS NEXT跑马灯组件教程:实际应用与场景示例1. 跑马灯组…...

【计算机网络】2物理层

物理层任务:实现相邻节点之间比特(或)的传输 1.通信基础 1.1.基本概念 1.1.1.信源,信宿,信道,数据,信号 数据通信系统主要划分为信源、信道、信宿三部分。 信源:产生和发送数据的源头。 信宿:接收数据的终点。 信道:信号的传输介质。 数据和信号都有模拟或数字…...

2.3 滑动窗口专题:最大连续1的个数 III(LeetCode 1004)

1. ​题目链接 1004. 最大连续1的个数 III - 力扣(LeetCode)https://leetcode.cn/problems/max-consecutive-ones-iii/ 2. ​题目描述 给定一个二进制数组 nums 和一个整数 k,允许将最多 k 个 0 翻转为 1,求翻转后最长的连续 1 …...

怎么解决在Mac上每次打开文件夹都会弹出一个新窗口的问题

在Mac上每次打开文件夹都会弹出一个新窗口的问题,可以通过以下方法解决‌ ‌调整Finder设置‌: 打开Finder,点击“Finder”菜单,选择“偏好设置”。在偏好设置中,选择“通用”标签。取消勾选“在标签页中打开文件夹”或…...

Python异常处理

异常处理 概述 在Python中,在处理可能会引发异常的代码块时,使用try和except语句。可以帮助我们捕获并处理异常, 而不是让程序因为一个未处理的异常而完全崩溃。 try-except try-except-finally try-finally try-except-else try-except-…...

VSTO(C#)Excel开发8:打包发布安装卸载

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...

ImportError: cannot import name ‘genai‘ from ‘google‘ (unknown location) 问题如何处理

这个错误通常发生在没有正确安装Google的生成式AI库。需要安装官方的google-generativeai库: pip install google-generativeai如果代码中使用的导入方式与新版SDK不兼容,可能需要调整导入语句。根据当前代码上下文,正确的导入方式应该是&am…...

Advanced Intelligent Systems 软体机器手助力截肢者玩转鼠标

随着科技的不断进步,假肢技术在改善截肢者生活质量方面取得了显著成就。然而,截肢群体在就业方面仍面临巨大困难,适龄截肢群体的就业率仅为健全群体的一半。现有的肌电控制假肢手在与计算机交互时存在诸多挑战,特别是截肢者在使用…...

kubernetes对于一个nginx服务的增删改查

1、创建 Nginx 服务 1.1、创建 Deployment Deployment 用于管理 Pod 副本和更新策略。 方式一:命令式创建 kubectl create deployment nginx-deployment --imagenginx:latest --replicas3 --port80--replicas3:指定副本数为 3 --port80:容…...

我的世界1.20.1forge模组进阶开发教程生物篇(1)——生成

生物生成 生物生成Alexmob介绍:**1. 核心功能与技术实现****2. 项目结构与代码质量****3. 社区协作与维护****4. 扩展性与开发挑战****5. 开发者学习价值**食蚁兽一、实体属性与行为控制(`EntityAnteater`类)二、实体注册与生成规则(`AMEntityRegistry`类)三、全局生成逻辑…...

1.5 Spring Boot项目打包和运行

本文介绍了如何使用Spring Boot进行项目打包和运行。首先,讲解了如何将Spring Boot项目打包为可执行的JAR包,并直接运行,无需部署到外部Web服务器。接着,介绍了如何将项目打包为WAR包,以便部署到Web容器中,…...

287. 寻找重复数

由于题目规定数组中的数的范围是1-n,因此可以构造出下标n和值nums[n]的映射f(n),然后构成一个链表,当有重复数字时,链表存在环,找到重复数字即找到链表环的入口,参考142. 环形链表II。 class Solution {pu…...

如何高效解决 Java 内存泄漏问题方法论

目录 一、系统化的诊断与优化方法论 二、获取内存快照:内存泄漏的第一步 (一)自动生成 Heap Dump (二)手动生成 Heap Dump 三、导入分析工具:MAT 和 JProfiler (一)MAT (Memor…...

【Agent】OpenManus 项目架构分析

这是我录制的一个视频,主要是描述我理解的 OpenManus 的思维逻辑,通过这个小的思维逻辑的复现,为后面要再分析其他 Agent 的实现做一个准备。 1. 项目概述 OpenManus 是一个基于大语言模型的智能体框架,旨在提供一个无需邀请码的…...

hive-进阶版-1

第6章 hive内部表与外部表的区别 Hive 是一个基于 Hadoop 的数据仓库工具,用于对大规模数据集进行数据存储、查询和分析。Hive 支持内部表(Managed Table)和外部表(External Table)两种表类型,它们在数据…...

规模效应的三重边界:大白话解读-deepseek为例

前言:当Scaling Laws遇见边际递减效应 在人工智能的狂飙突进中,大语言模型如同不断膨胀的星体,吞噬着海量算力与数据。OpenAI于2020年揭开的Scaling Laws,曾为这场盛宴指明方向:模型性能随参数规模(N&…...

考研系列-408真题计算机网络篇(18-23)

写在前面 此文章是本人在备考过程中408真题计算机网络部分(2018年-2023年)的易错题及相应的知识点整理,后期复习也常常用到,对于知识提炼归纳理解起到了很大的作用,分享出来希望帮助到大家~ # 2018 1.停止-等待协议的…...

windows协议不再续签,华为再无windows可用,将于四月发布鸿蒙PC

大家好,我是国货系创始人张云泽,最近不少小伙伴在后台问:“听说Windows协议要到期了?我的电脑会不会变砖?”还有人说:“华为笔记本以后用不了Windows了?鸿蒙系统能用吗?”今天咱们就…...

【二分算法】-- 点名

文章目录 1. 题目2. 题目解析3. 代码 1. 题目 在线oj 2. 题目解析 前四种解决方法: 哈希表直接遍历找结果位运算数学(高斯求和公式) 这四种方法的时间复杂度都是0(N) 第五种解决方法: 【二段性】&…...

强化学习 - PPO控制无人机

PPO(Proximal Policy Optimization,近端策略优化)是一种强化学习算法,用于训练智能体(无人机)如何在环境中做出决策。它本质上是 策略梯度(Policy Gradient)方法 的一种改进&#xf…...

【AHE数据集】 NCAR Anthropogenic Heat Flux (AHF) 数据集

数据概述 数据集由 美国国家大气研究中心(NCAR, National Center for Atmospheric Research) 的 气候与全球动力学实验室(CGD, Climate & Global Dynamics Laboratory) 提供。NCAR 由 美国国家科学基金会(NSF, National Science Foundation) 资助,并由 大学大气研究…...

Part1:基于国内源完成Kubernetes集群部署

集群规划 操作系统:CentOS7 内核版本:5.4(需升级) 组件版本说明操作系统内核5.4RPM方式升级docker26.1.4yum安装cri-docker0.3.16二进制安装kubeadm1.30.11yum安装kubealet1.30.11yum安装kubectl1.30.11yum安装kubectl1.30.11yu…...

强化学习的一些概念

目录 强化学习 打个比方 核心要素 State Action Reward 几个代码demo 学习目标 强化学习 强化学习(Reinforcement Learning, RL)是机器学习的一个分支,旨在让智能体(Agent)通过与环境的交互学习最优策略,以…...

花生好车:重构汽车新零售生态的破局者

在传统汽车零售行业面临消费升级与渠道变革的双重压力下,花生好车以颠覆性的商业模式在短短九年内崛起为行业独角兽。这家成立于2015年的汽车新零售平台,通过重构供应链体系、创新融资租赁模式、深耕下沉市场三大战略维度,正在重塑中国汽车消…...

K8S下nodelocaldns crash问题导致域名请求响应缓慢

前言 最近做项目,有业务出现偶发的部署导致响应很慢的情况,据了解,业务使用域名访问,相同的nginx代理,唯一的区别就是K8S重新部署了。那么问题大概率出现在容器平台,毕竟业务是重启几次正常,偶…...

实现悬浮按钮拖动,兼容h5和微信小程序

h5用js写,微信小程序用 代码里面没有完全实现吸附边缘的功能,需要吸附边缘的话还得自己再完善下(h5的吸附边缘是可以的,小程序的还有点问题) 主要功能是:图片上写文字的悬浮按钮,文字使用的是…...

SLC跨头协作机制

SLC跨头协作机制 SLC(Self-attention with Local Communication,或类似跨头协作机制)在Transformer架构中通过以下逻辑帮助注意力头优化分布: 1. 多头注意力的「独立-协作」平衡 传统多头注意力中,每个头独立计算注意力(如Query/Key/Value的线性变换),捕捉不同语义模…...

全国医院数据可视化分析系统

【大数据】全国医院数据可视化分析系统 (完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 🏥 项目名:医疗导航神器!——《基于大数据的微医挂号网医院数据可视…...

Flash Attention原理讲解

目录 前言0. 简述1. self-attention2. roofline model3. 矩阵分块4. softmax分块5. FlashAttention结语参考 前言 看了几个视频和几篇文章学习了下 Flash Attention,记录下个人学习笔记,仅供自己参考😄 refer1:Flash Attention 为…...

python二级复习(1)

临近计算机二级考试了,开始python的复习 python语言基础: 1.用缩进表示代码块:一般用四个空格或者一个tab 2.代码的注释方法: 单行注释用“#”表示注释开始;多行注释是用三个英文的单引号“‘’”或双引号““”"”作为注释的开始和结束符号。 03. 标识符命…...

基于cat1的贵重物品的状态和位置小型监控系统特色解析

一 项目需求 团队研发出来一款搭载多传感器的无线cat1定位和状态监控的设备。该设备主要面对的贵重物品运输过程中的状态监控,比如,是否被打开过,有没有激烈碰撞,位置信息等。主要应用场景是医疗,安防等贵重物品的状态…...

Python 魔法方法介绍

在 Python 中,魔法方法(Magic Methods)是一类特殊的内置方法,它们通常以双下划线开头和结尾(例如 __init__、__str__、__add__ 等)。这些方法通常用于实现特定的语法或操作符行为,或者用于定义对象的行为。它们是 Python 面向对象编程中的一个重要特性,可以让类的行为更…...

golang time包和日期函数

1.简介 在程序中日期和时间是我们经常会用到的,在go中time包提供了时间的显示和测量函数。 2.获取当前时间 通过time.Now()函数获取当前时间对象,然后获取时间对象的年月日时分秒等值。 now : time.Now()fmt.Printf("now%v type%T\n", now…...

第7章 站在对象模型的尖端2: 异常处理

1.异常处理(Exception Handling) C的异常处理由三个主要组成部分构成:throw表达式、catch子句和try块。当异常被抛出时,程序控制权会转移,并且会沿着调用堆栈回溯,直到找到匹配的catch子句。在此过程中,局部对象的析构…...

不同路径——2

给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角(即 grid[0][0])。机器人尝试移动到 右下角(即 grid[m - 1][n - 1])。机器人每次只能向下或者向右移动一步。 网格中的障碍物和空位置分别用 1 和 0 来表示。机器人的…...

电子招采软件系统,如何实现10年可追溯审计

一、在当前经济环境下,中小企业面临着巨大的生存压力,传统产业的数字化转型迫在眉睫。AI技术为企业的低成本高效发展提供了新机会,混合办公成为新常态,数据安全法的深入落实则进一步推动企业重视数据安全。区块链存证技术凭借独特…...

TS常见内置映射类型的实现及应用场景

以下是 TypeScript 在前端项目中 常用的映射类型&#xff08;Mapped Types&#xff09;&#xff0c;结合具体场景和代码示例&#xff0c;帮助开发者高效处理复杂类型&#xff1a; 一、基础映射类型 1. Partial<T> 作用&#xff1a;将对象类型 T 的所有属性变为可选。 实…...

本地部署Deep Seek-R1,搭建个人知识库——笔记

目录 一、本地部署 DeepSeek - R1 1&#xff1a;安装Ollama 2&#xff1a;部署DeepSeek - R1模型 3&#xff1a;安装Cherry Studio 二、构建私有知识库 一、本地部署 DeepSeek - R1 1&#xff1a;安装Ollama 1.打开Ollama下载安装 未科学上网&#xff0c;I 先打开迅雷再下…...