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

Python 基本库用法:数学建模

文章目录

    • 前言
    • 数据预处理——sklearn.preprocessing
      • 数据标准化
      • 数据归一化
      • 另一种数据预处理
      • 数据二值化
      • 异常值处理
    • numpy 相关用法
      • 跳过 nan 值的方法——nansum和nanmean
      • 展开多维数组(变成类似list列表的形状)
      • 重复一个数组——np.tile
    • 分组聚集——pandas.DataFrame.groupby()
      • 如何使用
        • 直接使用聚集函数
        • Agg
        • 直接解析分组结果
      • 参数说明——by
        • 传入属性列列表
        • 传入字典 dict
    • 表格合并——pandas.merge()
    • 数据库关系型表格 → 二维表——pandas.DataFrame.pivot()
    • 序列极值的获取——scipy.signal.argrelextrema


前言

  使用 Python 进行数学建模时,需要进行各种各样的数据预处理。因此熟练掌握 Python 的一些库可以帮助我们更好的进行数学建模。

数据预处理——sklearn.preprocessing

数据标准化

  数据标准化的目的是,通过线性缩放,使得一组数据的均值变成 0 0 0,方差变成 1 1 1。使用scale方法:

from sklearn import preprocessing
import numpy as npdata = np.array([[1.,1.,4.,5.],[1.,4.,1.,9.],[1.,9.,8.,1.]])
# 默认按列标准化(axis = 0),如需按行标准化需要指定 axis = 1
print(preprocessing.scale(data))# 结果如下,原本方差为 0 的数据,标准化后方差仍然是 0(因为无法变成1)
#[[ 0.         -1.1111678  -0.11624764  0.        ]
# [ 0.         -0.20203051 -1.16247639  1.22474487]
# [ 0.          1.31319831  1.27872403 -1.22474487]]

  我们知道标准化的实质是减去均值、除以标准差。StandarScalar可以用一组数据的均值、方差去标准化另一组数据。比如:

from sklearn import preprocessing
import numpy as npdata = np.array([[1.,1.,4.,5.],[1.,4.,1.,9.],[1.,9.,8.,1.]])
scaler = preprocessing.StandardScaler().fit(data)
new_data = np.array([[9.,2.,3.,4.]])# 用 data 的均值、标准差去标准化 new_data
print(scaler.transform(new_data))
# 结果为 [[ 8.         -0.80812204 -0.46499055 -0.30618622]]

数据归一化

  数据归一化指的是,通过线性缩放,使得一组数据的最小值为 0 0 0,最大值为 1 1 1。**实质是全体减去最小值,然后除以减法过后的最大值。**可以使用MinMaxScaler类:

from sklearn import preprocessing
import numpy as npdata = np.array([[1.,1.,4.,5.],[1.,4.,1.,9.],[1.,9.,8.,1.]])
# 创建 scaler
scaler = preprocessing.MinMaxScaler()print(scaler.fit_transform(data))
# 结果是
#[[0.         0.         0.42857143 0.5       ]
# [0.         0.375      0.         1.        ]
# [0.         1.         1.         0.        ]]# 同样可以用 data 的缩放方式来归一化 new_data
new_data = np.array([[1,0,3,7]])
print(scaler.transform(new_data))
# 结果为 [[ 0.         -0.125       0.28571429  0.75      ]]

另一种数据预处理

  还有一种数据预处理是,对初始数据 { x 1 , x 2 , ⋯ , x n } \{x_1,x_2,\cdots,x_n\} {x1,x2,,xn} 都除以 max ⁡ 1 ≤ i ≤ n ∣ x i ∣ \max\limits_{1\leq i\leq n}|x_i| 1inmaxxi,使得所有数据都落在 [ − 1 , 1 ] [-1,1] [1,1] 范围内。MaxAbsScaler类可以完成这种预处理,其用法和前面的MinMaxScaler类似。这个方法对那些已经中心化均值为 0 0 0 或者稀疏的数据有意义。

数据二值化

  数据二值化设置一个阈值threshold,小于等于它的变成 0 0 0,大于它的变成 1 1 1

from sklearn import preprocessing
import numpy as npdata = np.array([[1.,1.,4.,5.],[1.,4.,1.,9.],[1.,9.,8.,1.]])
# Binarizer 无参数默认 threshold = 0
print(preprocessing.Binarizer(threshold = 1).transform(data))
# 结果为
#[[0. 0. 1. 1.]
# [0. 1. 0. 1.]
# [0. 1. 1. 0.]]

参考文献:预处理数据的方法总结(使用sklearn-preprocessing)_from sklearn import preprocessing-CSDN博客

异常值处理

  四分位法清除异常值:首先计算出序列的第一四分位数、第三四分位数 Q 1 , Q 3 Q_1,Q_3 Q1,Q3,然后计算四分位数间距 I Q R = Q 3 − Q 1 \mathit{IQR}=Q_3-Q_1 IQR=Q3Q1。认为可接受的数据范围是 [ Q 1 − 1.5 I Q R , Q 3 + 1.5 I Q R ] [{{Q}_{1}}-1.5\mathit{IQR},{{Q}_{3}}+1.5\mathit{IQR}] [Q11.5IQR,Q3+1.5IQR]。如下图:
在这里插入图片描述

图源来自图片水印所示博客。

import pandas as pd# 直接把数据从这里输入进来
data = pd.Series([1,1,4,5,1,4,1,9,1,9,8,1,0])Q1 = data.quantile(0.25)
Q3 = data.quantile(0.75)
IQR = Q3 - Q1
# 根据条件筛选和删除异常值,输出的 data 就是处理后的结果
data = data[~((data < (Q1 - 1.5 * IQR)) | (data > (Q3 + 1.5 * IQR)))]

numpy 相关用法

跳过 nan 值的方法——nansum和nanmean

import numpy as nparr = np.array([1, 2, 3, 4, np.nan])
print(arr.sum(),arr.mean()) # nan nan
print(np.nansum(arr),np.nanmean(arr)) # 10.0 2.5,相当于删除所有 nan 值再操作

展开多维数组(变成类似list列表的形状)

import numpy as nparr = np.array(range(16)).reshape(4,-1)print(arr)
"""
[[ 0  1  2  3][ 4  5  6  7][ 8  9 10 11][12 13 14 15]]
"""
# 下面三种方法任选其一即可
print(arr.ravel())
# [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]
print(arr.flatten())
# [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]
print(arr.reshape(-1))
# [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]

重复一个数组——np.tile

import numpy as np# 只描述对于 2 维数组的情况,其他详情见参考文献data = np.array([[1,1,4],[5,1,4]])# 只传一个参数 x,那么行方向重复 x 次
print(np.tile(data,3))
"""
[[1 1 4 1 1 4 1 1 4][5 1 4 5 1 4 5 1 4]]
"""# 传一个含有两个参数的元组 (x,y),那么列方向重复 x 次,行方向重复 y 次
print(np.tile(data,(2,4)))
"""
[[1 1 4 1 1 4 1 1 4 1 1 4][5 1 4 5 1 4 5 1 4 5 1 4][1 1 4 1 1 4 1 1 4 1 1 4][5 1 4 5 1 4 5 1 4 5 1 4]]
"""

参考文献:numpy.tile()_np.tile-CSDN博客

分组聚集——pandas.DataFrame.groupby()

  对于一个表格进行类似 MySQL 聚集函数的处理,该方法的参数及默认值:

DataFrame.groupby(by=None, axis=0, level=None, as_index=True,sort=True, group_keys=True, squeeze=False, observed=False, dropna=True) 

如何使用

直接使用聚集函数

  方法得到的是一个对象,对于该对象可以使用聚集函数。比如下面的例子:

import pandas as pddf = pd.DataFrame({'A': [1, 2, 3, 4],'B': [5, 6, 7, 8],'C': ['X', 'X', 'Y', 'Y']
})# 聚集函数——均值mean(),还可以是最大值max(),最小值min(),
# 求和sum(),求积prod(),计数count(),标准差std(),各种统计数据describe()等。
print(df.groupby('C').mean()) # 即参数 by = 'C'
# 结果如下所示
#      A    B
# C          
# X  1.5  5.5
# Y  3.5  7.5print(df.groupby('C').rank())
# 结果如下所示
#      A    B
# 0  1.0  1.0
# 1  2.0  2.0
# 2  1.0  1.0
# 3  2.0  2.0
Agg

  agg 在基于相同的分组情况下,可以对不同列分别使用不同的聚集函数,如:

import pandas as pddf = pd.DataFrame({'A': [1, 2, 3, 4],'B': [5, 6, 7, 8],'C': ['X', 'X', 'Y', 'Y']
})# 对 'A' 列分组求最小值,对 'B' 列分组求最大值
print(df.groupby('C').agg({'A':'min','B':'max'}))# 结果如下所示
#    A  B
# C      
# X  1  6
# Y  3  8

  也可以传入自定义函数,比如上面的'B':'max'也可以等价地改为'B':lambda x : max(x),其中参数x是由 agg 分组形成的元组。

直接解析分组结果

  有时候希望根据分组结果,一组显示一张表格。直接打印 groupby 后的对象是不行的:

import pandas as pddf = pd.DataFrame({'name': ['香蕉', '菠菜', '糯米', '糙米', '丝瓜', '冬瓜', '柑橘', '苹果', '橄榄油'],'category': ['水果', '蔬菜', '米面', '米面', '蔬菜', '蔬菜', '水果', '水果', '粮油'],'price': [3.5, 6, 2.8, 9, 3, 2.5, 3.2, 8, 18],'count': [2, 1, 3, 6, 4, 8, 5, 3, 2]
})print(df.groupby('category'))
# 结果只是类名 + 内存地址
# <pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000025D2D49B6D8>

  但是我们可以按照下面的方式遍历,其中循环变量namestr类型,groupDataFrame类型:

import pandas as pddf = pd.DataFrame({'name': ['香蕉', '菠菜', '糯米', '糙米', '丝瓜', '冬瓜', '柑橘', '苹果', '橄榄油'],'category': ['水果', '蔬菜', '米面', '米面', '蔬菜', '蔬菜', '水果', '水果', '粮油'],'price': [3.5, 6, 2.8, 9, 3, 2.5, 3.2, 8, 18],'count': [2, 1, 3, 6, 4, 8, 5, 3, 2]
})
result = df.groupby('category')for name, group in result:print(f'group name: {name}')print('-' * 30)print(group)print('=' * 30, '\n')
"""
group name: 水果
------------------------------name category  price  count
0   香蕉       水果    3.5      2
6   柑橘       水果    3.2      5
7   苹果       水果    8.0      3
==============================
group name: 米面
------------------------------name category  price  count
2   糯米       米面    2.8      3
3   糙米       米面    9.0      6
==============================
group name: 粮油
------------------------------name category  price  count
8  橄榄油       粮油   18.0      2
==============================
group name: 蔬菜
------------------------------name category  price  count
1   菠菜       蔬菜    6.0      1
4   丝瓜       蔬菜    3.0      4
5   冬瓜       蔬菜    2.5      8
==============================
"""

参数说明——by

  上面使用都是by = 'C'等传入某一个属性列的方式。

传入属性列列表

  如果要按照多个属性列分组,可以传入属性列列表如下所示:

import pandas as pddf = pd.DataFrame({'x':[1,1,1,1,2,2,2,2],'y':[3,3,4,4,3,3,4,4],'value':[1,1,4,5,1,4,1,9]
})
# 按照 (x,y) 分组并求取最大值
print(df.groupby(['x','y']).max())
"""
结果是:value
x y       
1 3      14      5
2 3      44      9
"""

  groupby 接收多个属性,会将这些属性全部变成索引。之后可以接上reset_index操作,传入参数level,可以将第level列索引变成属性。

传入字典 dict

  要求字典是intstr的映射。这种情况下,将不会按照df中原有的列进行分组,而是根据字典的内容,将原来df中的某一行映射到字典对应的类中。例如:

import pandas as pddf = pd.DataFrame({'name': ['香蕉', '菠菜', '糯米', '糙米', '丝瓜', '冬瓜', '柑橘', '苹果', '橄榄油'],'category': ['水果', '蔬菜', '米面', '米面', '蔬菜', '蔬菜', '水果', '水果', '粮油'],'price': [3.5, 6, 2.8, 9, 3, 2.5, 3.2, 8, 18],'count': [2, 1, 3, 6, 4, 8, 5, 3, 2]
})# 下面这 5 行是为了自动化地得到字典:
# {0: '蔬菜水果', 1: '蔬菜水果', 2: '米面粮油', 3: '米面粮油', 4: '蔬菜水果', 
# 5: '蔬菜水果', 6: '蔬菜水果', 7: '蔬菜水果', 8: '米面粮油'}
category_dict = {'水果': '蔬菜水果', '蔬菜': '蔬菜水果', '米面': '米面粮油', '粮油': '米面粮油'}
the_map = {}
for i in range(len(df.index)):the_map[i] = category_dict[df.iloc[i]['category']]
grouped = df.groupby(the_map)# 按照 the_map 进行分组,那么原 df 中第 0,1,4,5,6,7 行被归为“蔬菜水果”,
# 第 2,3,8 行被归为“米面粮油”
result = df.groupby(the_map)# 按照不同类别进行打印
for name, group in result:print(f'group name: {name}')print('-' * 30)print(group)print('=' * 30, '\n')
"""
结果为:
group name: 米面粮油
------------------------------name category  price  count
2   糯米       米面    2.8      3
3   糙米       米面    9.0      6
8  橄榄油       粮油   18.0      2
============================== group name: 蔬菜水果
------------------------------name category  price  count
0   香蕉       水果    3.5      2
1   菠菜       蔬菜    6.0      1
4   丝瓜       蔬菜    3.0      4
5   冬瓜       蔬菜    2.5      8
6   柑橘       水果    3.2      5
7   苹果       水果    8.0      3
============================== 
"""

参考文献:深入理解 Pandas 中的 groupby 函数_observed=false-CSDN博客

表格合并——pandas.merge()

  这个merge和 MySQL 的 join 是有几分相似的。该方法的参数和默认值:

DataFrame.merge(left, right, how='inner', on=None, left_on=None, right_on=None,left_index=False, right_index=False, sort=True,suffixes=('_x', '_y'), copy=True, indicator=False,validate=None)
  • 其中how还可以是left,right,outer,对应 MySQL 中的左、右、外连接;MySQL 中连接产生的 null 在 Python 中变成 nan。
  • on可以指定链接的时候参照那些属性列。默认情况下on = None,即自然连接
  • (不常用)indicator参数在最终合并形成的表格中加入一个_merge列,值域为{left_only,both,right_only},描述每一条结果是如何连接形成的。例子如下:
import pandas as pddf1 = pd.DataFrame({'col1': [0, 1], 'col_left':['a', 'b']})
df2 = pd.DataFrame({'col1': [1, 2, 2],'col_right':[2, 2, 2]})
print(pd.merge(df1, df2, on='col1', how='outer', indicator=True))
"""
结果如下所示:col1 col_left  col_right      _merge
0     0        a        NaN   left_only
1     1        b        2.0        both
2     2      NaN        2.0  right_only
3     2      NaN        2.0  right_only
"""

  参考文献:【python】详解pandas库的pd.merge函数-CSDN博客

数据库关系型表格 → 二维表——pandas.DataFrame.pivot()

  标题的意思是这样的:已有一个关系型数据库,可以指定两个索引(行索引、列索引)以及对应的值索引,转化为一个二维表格。如下图所示。
在这里插入图片描述
如果图片左边的 DataFrame 是变量 data,通过下面的语句实现到右边表格的转换:

data.pivot('name','year','gdp') 

  函数原型是:

DataFrame.pivot(index=None, columns=None, values=None)

  右边二维表行列索引的生成机制是 index 和 columns 的笛卡尔积。笛卡尔积集合中可能有不存在的 (index, columns) 组合,经过pivot处理变成 nan,如:

import pandas as pd
data = pd.DataFrame({'name':['原神','原神','星铁','星铁','星铁'],'year':[2022,2023,2022,2023,2024],'income':[11,21,31,41,51]
})
print(data,'\n','-' * 24)
print(data.pivot('name','year','income'))
"""name  year  income
0   原神  2022      11
1   原神  2023      21
2   星铁  2022      31
3   星铁  2023      41
4   星铁  2024      51 ------------------------
year  2022  2023  2024
name                  
原神    11.0  21.0   NaN
星铁    31.0  41.0  51.0
"""

  不能存在相同的 (index, columns) 组合:

import pandas as pd
data = pd.DataFrame({'name':['原神','原神'],'year':[2022,2022],'income':[11,21]
})
print(data.pivot('name','year','income'))
# ValueError: Index contains duplicate entries, cannot reshape

参考文献:Python dataframe.pivot()用法解析_dataframe pivot-CSDN博客

序列极值的获取——scipy.signal.argrelextrema

  已知一个序列,可以用这个库方便地求极大值极小值。代码示例如下:

from scipy.signal import argrelextrema
import numpy as np
# y 是待求序列
y = np.array([1,9,6,8,2,5,8,3,2,7,3,2,7,5])# np.greater_equal 表示求极大值,order = 1 表示和左边、右边的 1 个数字对比(是极大值的定义)
peak_index = argrelextrema(y,np.greater_equal,order=1)print(peak_index)
"""
结果: (array([ 1,  3,  6,  9, 12], dtype=int64),)
peak_index[0] 给出了极大值点的数组
"""

  上面使用np.greater_equal求极大值点,同样地我们可以使用np.less_equal求极小值点。甚至可以自定义函数,将上面代码第 7 行改为:

peak_index = argrelextrema(y,lambda a,b: a - b > 3,order=1)

  这将返回比左、右两边元素都大 3 3 3 的所有元素(此例中只有y[9])的索引(此例为9)。
参考文献:数据分析——scipy.signal.argrelextrema求数组中的极大值和极小值-CSDN博客

相关文章:

Python 基本库用法:数学建模

文章目录 前言数据预处理——sklearn.preprocessing数据标准化数据归一化另一种数据预处理数据二值化异常值处理 numpy 相关用法跳过 nan 值的方法——nansum和nanmean展开多维数组&#xff08;变成类似list列表的形状&#xff09;重复一个数组——np.tile 分组聚集——pandas.…...

Android Greendao的数据库复制到设备指定位置

方法如下&#xff1a; private void export() {// 确保您已经请求并获得了WRITE_EXTERNAL_STORAGE权限// 获取要储存的设备路径String picturesDirPath Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath();// 在公共目录下创建…...

Ajax 揭秘:异步 Web 交互的艺术

Ajax 揭秘&#xff1a;异步 Web 交互的艺术 一 . Ajax 的概述1.1 什么是 Ajax ?1.2 同步和异步的区别1.3 Ajax 的应用场景1.3.1 注册表单的用户名异步校验1.3.2 内容自动补全 二 . Ajax 的交互模型和传统交互模型的区别三 . Ajax 异步请求 axios3.1 axios 介绍3.1.1 使用步骤3…...

TitleBar:打造高效Android标题栏的新选择

在Android应用开发中&#xff0c;标题栏是用户界面的重要组成部分。一个好的标题栏不仅能够提升应用的专业感&#xff0c;还能增强用户体验。然而&#xff0c;传统的标题栏实现方式往往存在代码冗余、样式不统一、性能开销大等问题。今天&#xff0c;我们将介绍一个名为TitleBa…...

Lua协同程序Coroutine

Lua 协同程序(Coroutine) 定义 Lua 协同程序(Coroutine)与线程类似&#xff1a;拥有独立的堆栈、局部变量、指令指针&#xff0c;同时又与其它协同程序共享全局变量和其它大部分东西。 协同程序可以理解为一种特殊的线程&#xff0c;可以暂停和恢复其执行&#xff0c;从而允…...

【vue+帆软】帆软升级,从版本9升级到版本11,记录升级过程

帆软要升级&#xff0c;记录下过程 1、帆软官网地址必不可少&#xff0c;戳这里&#xff0c;跳转帆软官网 点击前端开发指南 点击JS API 跳转过来就是版本11 一直往下翻&#xff0c;在最底部有个2.2 在Web中使用&#xff0c;圈起来的就是要引入到index.html中的脚本 在项…...

linux从0到1 基础完整知识

1. Linux系统概述 Linux是一种开源操作系统&#xff0c;与Windows或macOS等操作系统不同&#xff0c;Linux允许用户自由地查看、修改和分发其源代码。以下是Linux系统的一些显著的优势。 稳定性和可靠性&#xff1a; 内核以其稳定性而闻名&#xff0c;能够持续运行数月甚至数…...

“人大金仓”正式更名为“电科金仓”; TDSQL-C支持回收站/并行DDL等功能; BigQuery支持直接查询AlloyDB

重要更新 1. “人大金仓”正式更名为“电科金仓”&#xff0c;完整名称“中电科金仓&#xff08;北京&#xff09;科技股份有限公司”&#xff0c;突出金仓是中国电子科技集团有限公司在基础软件领域产品( [1] ) 。据悉人大金仓在上半年营收入为9056万元&#xff0c;净利润约21…...

大模型微调 - 用PEFT来配置和应用 LoRA 微调

大模型微调 - 用PEFT来配置和应用 LoRA 微调 flyfish PEFT&#xff08;Parameter-Efficient Fine-Tuning&#xff09;是一种参数高效微调库&#xff0c;旨在减少微调大型预训练模型时需要更新的参数量&#xff0c;而不影响最终模型的性能。它支持几种不同的微调方法&#xff…...

Ubuntu构建只读文件系统

本文介绍Ubuntu构建只读文件系统。 嵌入式系统使用过程中&#xff0c;有时会涉及到非法关机&#xff08;比如直接关机&#xff0c;或意外断电&#xff09;&#xff0c;这可能造成文件系统损坏&#xff0c;为了提高系统的可靠性&#xff0c;通常将根文件系统设置为只读&#xf…...

【黑金系】金融UI/UX体验设计师面试作品集 Figma源文件分享

在数字金融时代&#xff0c;UI/UX体验设计师扮演着至关重要的角色。他们不仅塑造着产品的界面&#xff0c;更引领着用户的使用体验。我们的面试作品集&#xff0c;正是这样一部展现金融UI/UX设计魅力的宝典。 这套作品集汇聚了众多经典案例&#xff0c;每一处设计都经过精心雕…...

Golang | Leetcode Golang题解之第392题判断子序列

题目&#xff1a; 题解&#xff1a; func isSubsequence(s string, t string) bool {n, m : len(s), len(t)f : make([][26]int, m 1)for i : 0; i < 26; i {f[m][i] m}for i : m - 1; i > 0; i-- {for j : 0; j < 26; j {if t[i] byte(j a) {f[i][j] i} else {…...

Liunx常用指令

1. 文件和目录管理 ls 用法&#xff1a;ls [选项] [文件/目录]示例&#xff1a;ls -l&#xff08;以长列表格式显示&#xff09;&#xff0c;ls -a&#xff08;显示所有文件&#xff0c;包括隐藏文件&#xff09;。 cd 用法&#xff1a;cd [目录]示例&#xff1a;cd ..&#xf…...

CSS基础:浮动(float)如何使用清楚以及代替方法

浮动元素在 CSS 中主要通过 float 属性来控制&#xff0c;影响元素的排列方式。浮动用于创建流式布局&#xff0c;常用于实现图文混排、布局列等效果。以下是浮动元素的相关属性和使用方法&#xff1a; 1. 基本浮动属性 float: 控制元素的浮动方向&#xff0c;可以设置为 left…...

margin重叠该怎么解决?

在CSS中&#xff0c;当两个或多个垂直相邻的块级元素&#xff08;如<div>&#xff09;的margin相遇时&#xff0c;它们不会叠加成两个margin的和&#xff0c;而是会取两个margin中的较大值&#xff0c;这种现象被称为“margin重叠”&#xff08;margin collapsing&#x…...

Linux学习笔记(黑马程序员,前四章节)

第一章 快照 虚拟机快照&#xff1a; 通俗来说&#xff0c;在学习阶段我们无法避免的可能损坏Linux操作系统&#xff0c;如果损坏的话&#xff0c;重新安装一个Linux操作系统就会十分麻烦。VMware虚拟机支持为虚拟机制作快照。通过快照将当前虚拟机的状态保存下来&#xff0c;…...

tekton pipeline resources

PipelineResource 代表着一系列的资源&#xff0c;主要承担作为 Task 的输入或者输出的作用。它有以下几种类型&#xff1a; git&#xff1a;代表一个 git 仓库&#xff0c;包含了需要被构建的源代码。将 git 资源作为 Task 的 Input&#xff0c;会自动 clone 此 git 仓库。pu…...

使用Python实现多个PDF文件的合并

使用Python可以很方便地实现多个PDF文件的合并。我们可以使用PyPDF2库来完成这个任务。以下是一个实现PDF合并的Python脚本&#xff1a; import os from PyPDF2 import PdfMergerdef merge_pdfs(input_dir, output_filename):# 创建一个PdfMerger对象merger PdfMerger()# 获取…...

微擎忘记后台登录用户名和密码怎么办?解决方法

微擎忘记后台登录名和登录密码是很常见的&#xff0c;服务器百科网fwqbk.com告诉你找回后台登录用户名和密码的方法&#xff1a; 一&#xff1a;找回微擎后台用户名 &#xff08;如果只是忘记了后台登录密码&#xff0c;请忽略此步骤&#xff0c;跳转到第二步&#xff09; 通…...

blender我的对称模型好像中点被我不小心移动了 我现在如果雕刻 两边修改的地方不是对称的 我该怎么办

blender我的对称模型好像中点被我不小心移动了 我现在如果雕刻 两边修改的地方不是对称的 我该怎么办 首先请调整好模型确保左右前后对其相应的xyz轴 之后CtrlA应用变换 确保这些都归0且模型和xyz轴对应 如果在Blender中模型的中点&#xff08;对称轴&#xff09;不小心被移动了…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...

文件上传漏洞防御全攻略

要全面防范文件上传漏洞&#xff0c;需构建多层防御体系&#xff0c;结合技术验证、存储隔离与权限控制&#xff1a; &#x1f512; 一、基础防护层 前端校验&#xff08;仅辅助&#xff09; 通过JavaScript限制文件后缀名&#xff08;白名单&#xff09;和大小&#xff0c;提…...