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

python | numpy小记(五):理解 NumPy 中的 `np.arccos`:反余弦函数

python | numpy小记(五):理解 NumPy 中的 `np.arccos`:反余弦函数

    • 一、函数签名与核心参数
    • 二、数学定义与取值范围
    • 三、基础使用示例
    • 四、与 Python 内建 `math.acos` 的对比
    • 五、常见问题与注意事项
    • 六、典型应用场景
      • 1. 三维向量夹角计算
      • 2. 信号处理与相位差
      • 3. 几何绘图
    • 七、小结


在科学计算与信号处理等领域,经常需要根据已知余弦值反向求角度——这时就用到 NumPy 提供的 np.arccos(反余弦)函数。下面从函数签名、数学定义、使用示例、注意事项和典型应用等方面,帮你系统地理解并掌握 np.arccos


一、函数签名与核心参数

numpy.arccos(x, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True)
  • x:输入标量或数组(array_like),其元素应在 [ − 1 , 1 ] [-1,1] [1,1] 范围内。
  • out:可选,提供一个同形状的数组用来就地存放结果。
  • 其余参数用于高级广播、类型转换和性能调优,一般无需修改。

返回值是一个与 x 同形状的 ndarray,元素值就是对应输入的反余弦角度(单位:弧度)。


二、数学定义与取值范围

  • 定义

    arccos ⁡ ( x ) = θ , s.t. cos ⁡ ( θ ) = x , 0 ≤ θ ≤ π . \arccos(x) = \theta, \quad \text{s.t.}\;\cos(\theta)=x,\;0\le\theta\le\pi. arccos(x)=θ,s.t.cos(θ)=x,0θπ.

  • 定义域:输入 x x x 必须在 [ − 1 , 1 ] [-1,1] [1,1] 之内,否则输出 nan 并伴随警告。

  • 值域:返回角度 θ ∈ [ 0 , π ] \theta\in[0,\pi] θ[0,π],即 [ 0 , 18 0 ∘ ] [0,180^\circ] [0,180]


三、基础使用示例

import numpy as np# 标量运算
print(np.arccos(1.0))    # 0.0 (0°)
print(np.arccos(0.0))    # ≈1.5708 (90°)
print(np.arccos(-1.0))   # ≈3.1416 (180°)# 数组运算
arr = np.array([1.0, 0.5, 0.0, -0.5, -1.0])
res = np.arccos(arr)
print(res)
# [0.         1.04719755 1.57079633 2.0943951  3.14159265]
# 其中 1.04719755≈60°,2.0943951≈120°

四、与 Python 内建 math.acos 的对比

math.acos(x)np.arccos(x)
支持类型单个浮点数标量或任意维度数组
返回类型Python floatNumPy ndarray
性能单次调用向量化批量运算,性能更高
广播与 out不支持支持广播、就地存储(out

五、常见问题与注意事项

  1. 超出 [ − 1 , 1 ] [-1,1] [1,1]

    x = np.array([1.2, -1.5])
    theta = np.arccos(x)
    # 会得到 [nan, nan] 并出现 RuntimeWarning
    

    可先用 np.clip(x, -1, 1) 将数值截断再计算,避免 nan

  2. 数据类型

    • 输入整数数组会被自动转换为浮点运算。
    • 输出默认 float64,可用 out= 或在后续处理中转换类型。
  3. 单位转换
    如果需要度为单位,可再乘以 180/np.pi

    deg = np.arccos(arr) * 180 / np.pi
    

六、典型应用场景

1. 三维向量夹角计算

import numpy as npu = np.array([1, 0, 0])
v = np.array([1, 1, 0]) / np.sqrt(2)
dot = np.dot(u, v)          # 0.707...
angle = np.arccos(dot)      # ≈0.785 rad (45°)
print(angle, angle*180/np.pi)

2. 信号处理与相位差

对于频域信号 X ( f ) X(f) X(f) 的实部和虚部,可计算相位:

phase = np.arccos(real_part / np.abs(X))

3. 几何绘图

结合 matplotlibmayavi,可绘制极坐标或 3D 曲面:

import numpy as np
import matplotlib.pyplot as plttheta = np.linspace(0, np.pi, 100)
y = np.cos(theta)
plt.plot(theta, y)
plt.xlabel('θ (rad)')
plt.ylabel('cos θ')
plt.title('Cosine Curve and Inverse Cosine Points')
plt.scatter(np.arccos(y), y)
plt.show()

七、小结

  • 功能:批量对输入数组执行反余弦运算,输出弧度制角度。
  • 优势:向量化、支持广播与就地写入;性能远胜逐元素 Python 循环。
  • 注意:保持输入 [ − 1 , 1 ] [-1,1] [1,1] 范围,避免产生 nan,并留意返回类型。

掌握 np.arccos,你就能在三维几何、相位分析、图像处理等多领域,高效地完成反余弦计算。欢迎在评论区分享你的实践案例和问题!

http://www.lqws.cn/news/581761.html

相关文章:

  • 卡片跳转到应用页面(router事件)
  • 一文详解Modbus协议原理、技术细节及软件辅助调试
  • 华为云Flexus+DeepSeek征文|​​华为云ModelArts Studio大模型 + WPS:AI智能PPT生成解决方案​
  • 基于时间策略+应用过滤的游戏防沉迷方案:技术实现与工具推荐
  • 本地服务器部署后外网怎么访问不了?内网地址映射互联网上无法连接问题的排查
  • 【Pandas】pandas DataFrame Flags
  • AR 学习:开启未来学习新视界​
  • Stable Diffusion 项目实战落地:从0到1 掌握ControlNet 第四篇 风格化字体大揭秘:从线稿到涂鸦,ControlNet让文字焕发新生
  • SQuirreL SQL:一个免费的通用数据库开发工具
  • OpenWrt | 使用 Docker 运行 iperf3
  • 2 大语言模型基础-2.2 生成式预训练语言模型GPT-2.2.2 有监督下游任务微调-Instruct-GPT强化学习奖励模型的结构改造与维度转换解析
  • AI行业深度观察:从资本竞逐到技术突破的全面解析
  • 38.docker启动python解释器,pycharm通过SSH服务直连
  • 物联网基础
  • 【Mars3d】支持的basemaps数组与layers数组的坐标系列举
  • 电脑开机加速工具,优化启动项管理
  • 感受新复古主义独特魅力,新大洲本田NS150LA上市
  • Docker从部署到实战
  • ADB 安装 APK 及处理安装弹窗的方法
  • 人工智能基石:SVM支持向量机全解析(附Python实战)
  • SpringBoot+ShardingSphere-分库分表教程(二)
  • 如何防止恶意软件感染服务器:防病毒与EDR方案
  • creo 2.0学习笔记
  • 云上攻防—Docker安全容器逃逸特权模式危险挂载
  • DORIS数据备份(HDFS)
  • 对称非对称加密,https和http,https通讯原理,Charles抓包原理
  • 非常详细版: dd.device.geolocation 钉钉微应用获取定位,移动端 PC端都操作,Vue实现钉钉微应用获取精准定位并渲染在地图组件上
  • GeoTools 结合 OpenLayers 实现属性查询(二)
  • Python UI自动化演进格局:从传统库到AI驱动的智能代理
  • (4)pytest-fixture