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

学习日志10 python

先来5道题目唤醒自己吧,进入coding状态!

1 Python 中 math库的核心功能和常用函数

1. 数值计算函数

函数描述示例
math.ceil(x)向上取整,返回不小于 x 的最小整数。math.ceil(5.1) → 6
math.floor(x)向下取整,返回不大于 x 的最大整数。math.floor(5.9) → 5
math.trunc(x)截断小数部分,仅保留整数部分。math.trunc(5.9) → 5
math.fabs(x)返回 x 的绝对值(浮点型)。math.fabs(-5) → 5.0
math.factorial(x)计算 x 的阶乘(x 必须为非负整数)。math.factorial(5) → 120
math.fmod(x, y)计算 x % y 的余数(浮点型),与 Python 的 % 运算符有所不同。math.fmod(5, 2) → 1.0
math.fsum(iterable)精确计算可迭代对象中所有元素的和,能减少浮点数误差。math.fsum([0.1, 0.2, 0.3]) → 0.6

2. 幂函数与对数函数

函数描述示例
math.pow(x, y)计算 x 的 y 次幂(返回浮点型)。math.pow(2, 3) → 8.0
math.sqrt(x)计算 x 的平方根(x 需为非负数)。math.sqrt(16) → 4.0
math.exp(x)计算自然常数 e 的 x 次幂。math.exp(1) → 2.71828...
math.log(x[, base])计算对数,默认以 e 为底;若指定 base,则计算以 base 为底的对数。math.log(100, 10) → 2.0
math.log10(x)计算以 10 为底的对数。math.log10(100) → 2.0
math.log2(x)计算以 2 为底的对数。math.log2(8) → 3.0

3. 三角函数与反三角函数

这些函数的参数均为弧度值。若要将角度转换为弧度,可使用 math.radians(degrees);若要将弧度转换为角度,则使用 math.degrees(radians)

函数描述示例
math.sin(x)计算正弦值。math.sin(math.pi/2) → 1.0
math.cos(x)计算余弦值。math.cos(math.pi) → -1.0
math.tan(x)计算正切值。math.tan(0) → 0.0
math.asin(x)计算反正弦值(返回值范围:[-π/2, π/2])。math.asin(1) → 1.57079...
math.acos(x)计算反余弦值(返回值范围:[0, π])。math.acos(0) → 1.57079...
math.atan(x)计算反正切值(返回值范围:[-π/2, π/2])。math.atan(1) → 0.78539...

4. 双曲函数

函数描述
math.sinh(x)计算双曲正弦值。
math.cosh(x)计算双曲余弦值。
math.tanh(x)计算双曲正切值。
math.asinh(x)计算反双曲正弦值。
math.acosh(x)计算反双曲余弦值(x 需大于等于 1)。
math.atanh(x)计算反双曲正切值(x 的绝对值需小于 1)。

5. 特殊常量

常量描述
math.pi圆周率 π。3.141592653589793
math.e自然常数 e。2.718281828459045
math.tau圆周常数 τ(等于 )。6.283185307179586
math.inf正无穷大(浮点型)。float('inf')
math.nan非数字值(NaN,浮点型)。float('nan')

6. 浮点数处理与特殊函数

函数描述示例
math.isnan(x)判断 x 是否为 NaN(非数字值)。math.isnan(float('nan')) → True
math.isinf(x)判断 x 是否为无穷大(正无穷或负无穷)。math.isinf(float('inf')) → True
math.isfinite(x)判断 x 是否为有限值(既不是无穷大,也不是 NaN)。math.isfinite(5.0) → True
math.gcd(a, b)计算 a 和 b 的最大公约数(要求 ab 为整数)。math.gcd(12, 8) → 4
math.lcm(a, b)计算 a 和 b 的最小公倍数(要求 ab 为整数,Python 3.9+ 支持)。math.lcm(4, 6) → 12
math.hypot(*coordinates)计算多个坐标点到原点的欧几里得距离。对于二维坐标,等同于 sqrt(x² + y²)math.hypot(3, 4) → 5.0

7. 应用示例

下面是几个综合运用 math 库函数的例子:

python

运行

import math# 计算圆的面积
radius = 5
area = math.pi * radius ** 2
print(f"半径为 {radius} 的圆面积:{area}")  # 输出 78.53981633974483# 角度与弧度的转换
degrees = 90
radians = math.radians(degrees)
print(f"{degrees} 度转换为弧度:{radians}")  # 输出 1.5707963267948966
print(f"sin({degrees}°) = {math.sin(radians)}")  # 输出 1.0# 复数的模(等同于 math.hypot)
x, y = 3, 4
magnitude = math.sqrt(x**2 + y**2)
print(f"复数 {x}+{y}i 的模:{magnitude}")  # 输出 5.0

注意事项

  • 精度问题:由于浮点数在计算机中的表示方式,某些运算可能会出现精度误差,比如 math.sqrt(2) * math.sqrt(2) 可能不等于 2.0
  • 定义域限制:部分函数对输入值有要求,例如 math.sqrt(x) 中的 x 必须是非负数,math.log(x) 中的 x 必须是正数。
  • 性能考量:若需进行高效的数值计算,可考虑使用 numpy 库,它在处理数组运算时性能更优。
题目
import math 
print(math.floor(5.5))
#这个什么东西一点看不懂

这段代码使用了 Python 的内置数学库 math,并调用了它的 floor 函数。下面是对代码的详细解释:

  1. import math:这行代码导入了 Python 的标准数学库,它提供了许多数学相关的函数和常量。

  2. math.floor(5.5):这里调用了 math 库中的 floor 函数。floor 的作用是向下取整,即返回不大于给定数值的最大整数。对于 5.5 来说,不大于它的最大整数是 5,所以 math.floor(5.5) 的结果是 5

  3. print(...):这是 Python 的打印函数,用于将括号内的内容输出到控制台。

总结:整段代码的作用是打印出 5.5 向下取整后的结果,也就是 5

2 Pasty库

Patsy 是 Python 中一个用于描述统计模型和构建设计矩阵的库,特别适合与统计分析库(如 statsmodels)结合使用。下面我将介绍如何使用 Patsy 进行数据的标准化和中心化处理,并解释相关知识点。

1. 什么是标准化和中心化?

  • 中心化(Centering):将变量的均值调整为 0,即每个数据点减去该变量的均值。
    公式:x' = x - mean(x)

  • 标准化(Standardization):将变量转换为均值为 0、标准差为 1 的分布,也称为 Z-score 标准化。
    公式:x' = (x - mean(x)) / std(x)

  • 作用:消除变量量纲的影响,提高模型稳定性,便于比较不同变量的效应。

2. Patsy 中的数据转换

Patsy 使用公式字符串(如 "y ~ x1 + x2")来描述统计模型,并通过 dmatrix() 函数生成设计矩阵。在公式中,可以使用以下函数进行标准化和中心化:

(1) 中心化
  • 使用 center() 函数:center(x)
    或者直接减去均值:x - mean(x)
(2) 标准化
  • 使用 standardize() 函数:standardize(x)
    等价于:(x - mean(x)) / std(x)
(3) 自定义标准化
  • 使用 I() 包裹自定义表达式:I((x - mean(x)) / std(x))

3. 示例代码

下面是使用 Patsy 进行标准化和中心化的示例:

python

运行

import numpy as np
import pandas as pd
from patsy import dmatrix# 创建示例数据
data = pd.DataFrame({'x1': np.random.randn(100),  # 连续变量'x2': np.random.randint(1, 5, 100),  # 分类变量'y': np.random.randn(100) * 2 + 3  # 因变量
})# 1. 原始数据
print("原始数据前5行:")
print(data.head())# 2. 中心化处理
# 公式中的 C(x2) 表示将 x2 视为分类变量
centered_data = dmatrix("y ~ center(x1) + C(x2)", data, return_type='dataframe')
print("\n中心化后的数据前5行:")
print(centered_data.head())# 3. 标准化处理
standardized_data = dmatrix("y ~ standardize(x1) + C(x2)", data, return_type='dataframe')
print("\n标准化后的数据前5行:")
print(standardized_data.head())# 4. 验证标准化结果
x1_std = standardized_data['standardize(x1)']
print(f"\nx1 标准化后的均值:{x1_std.mean():.4f}")  # 接近 0
print(f"x1 标准化后的标准差:{x1_std.std():.4f}")  # 接近 1

4. 关键知识点

(1) 公式语法
  • ~:分隔因变量和自变量(如 y ~ x1 + x2)。
  • +:添加变量(注意与数学加法的区别)。
  • C():将变量转换为分类变量(如 C(x2))。
  • center() 和 standardize():内置的中心化和标准化函数。
  • I():包裹数学表达式(如 I(x1**2) 表示 x1 的平方)。
(2) 分类变量处理
  • Patsy 默认将分类变量转换为哑变量(dummy variables),并自动选择参考水平(通常是第一个类别)。
  • 示例中 C(x2) 会生成多个列(如 C(x2)[T.2]C(x2)[T.3] 等),表示相对于参考水平的差异。
(3) 与 statsmodels 结合

Patsy 的设计矩阵可直接用于 statsmodels 的模型拟合:

python

运行

import statsmodels.api as sm# 使用标准化后的数据拟合线性回归模型
model = sm.OLS(standardized_data['y'], standardized_data.drop('y', axis=1))
results = model.fit()
print(results.summary())

5. 注意事项

  1. 训练集与测试集
    标准化参数(如均值、标准差)应仅基于训练数据计算,然后应用到测试数据上,避免数据泄露。

  2. 缺失值处理
    Patsy 默认会删除包含缺失值的行,可通过 NA_action 参数自定义处理方式。

  3. 其他标准化方法

    • Min-Max 标准化:I((x - min(x)) / (max(x) - min(x)))
    • 对数变换:I(np.log(x))

6. 扩展阅读

  • Patsy 官方文档
  • statsmodels 线性回归示例

3 比较运算符优先级大于逻辑运算符

题目

输出结果是(   )

a = 'a'
print(a > 'b' or 'c')

答案:'c'
 

解析:

  1. 优先级规则:比较运算符(如 ><)的优先级确实高于逻辑运算符(如 orand)。因此,代码 a > 'b' or 'c' 会先计算 a > 'b'

  2. 字符串比较:变量 a 的值是 'a',而 'a' > 'b' 的结果为 False(因为字母 'a' 在字典序中小于 'b')。

  3. 逻辑 OR 运算:表达式变为 False or 'c'。在 Python 中,逻辑运算符 or 遵循短路规则:

    • 如果左侧为 True,直接返回左侧值,不计算右侧。
    • 如果左侧为 False,返回右侧值(无论右侧是什么)。
  4. 最终结果:由于 False or 'c' 的左侧为 False,所以直接返回右侧的 'c'

验证代码:

python

运行

a = 'a'
print(a > 'b' or 'c')  # 输出:'c'

易错点:

  • 不要混淆逻辑运算符的 “返回值” 和 “布尔结果”。or 并不总是返回 True 或 False,而是返回参与运算的某个值。
  • 优先级规则决定了表达式的计算顺序,但最终结果还受逻辑运算的短路特性影响。

文章转载自:
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://www.dtcms.com/a/281566.html

相关文章:

  • 【鲲苍提效】全面洞察用户体验,助力打造高性能前端应用
  • JAVA青企码协会模式系统源码支持微信公众号+微信小程序+H5+APP
  • vlan作业
  • CommunityToolkit.Mvvm IOC 示例
  • 【Java】JUC并发(线程的方法、多线程的同步并发)
  • 定时器更新中断与串口中断
  • ArrayList列表解析
  • GCC属性修饰符__attribute__((unused))用途
  • 2025国自然青基、面上资助率,或创新低!
  • IPSec和HTTPS对比(一)
  • Java使用itextpdf7生成pdf文档
  • GAMES101 lec1-计算机图形学概述
  • 前端-CSS-day4
  • 边缘计算中模型精度与推理速度的平衡策略及硬件选型
  • 实战长尾关键词SEO优化指南提升排名
  • Go语言调度器深度解析:sysmon的核心作用与实现原理
  • Web3.0 学习方案
  • ROS第十五梯:launch进阶用法——conda自启动和多终端多节点运行
  • Axios 和Express 区别对比
  • 前端打包自动压缩为zip--archiver
  • Bp神经网络公式导出方法
  • 【SpringBoot】实战-开发模式及环境搭建
  • 学习嵌入式的第二十八天-数据结构-(2025.7.15)进程和线程
  • For and While Loop
  • javaScript 基础知识(解决80%js面试问题)
  • 代码随想录算法训练营十六天|二叉树part06
  • 配置nodejs,若依
  • 【08】MFC入门到精通——MFC模态对话框 和 非模态对话框 解析 及 实例演示
  • Git未检测到文件更改
  • 密码协议的基本概念