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.pswp.cn/diannao/89195.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89195.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/89195.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为云Flexus+DeepSeek征文 | 华为云ModelArts与Reor的完美结合:创建高效本地AI笔记环境

华为云FlexusDeepSeek征文 | 华为云ModelArts与Reor的完美结合:创建高效本地AI笔记环境 引言一、ModelArts Studio平台介绍华为云ModelArts Studio简介ModelArts Studio主要特点 二、Reor介绍Reor简介Reor主要特点 三、安装Reor工具下载Reor软件安装Reor工具 四、开…

【启发式算法】Dynamic A*(D*)算法详细介绍(Python)

📢本篇文章是博主人工智能(AI)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…

报告怎么写

替代方案(按场景选择) 岗前准备阶段 ✅ "熟悉业务流程/系统操作" ✅ "掌握XX工具/平台的核心功能" ✅ "完成上岗前技术对接" 知识转化场景 ✅ "梳理产品知识体系" ✅ "转化技术文档为实操方案" ✅ &…

大模型——怎么让 AI 写出好看有设计感的网页

大模型——怎么让 AI 写出好看有设计感的网页 你让 AI 给你写的网页大概都是这样的: 或者这样: 好点的时候能这样: 但都不够高级,尤其是那个像引用一样的边框,太 AI 了。 今天教大家一个小技巧,写出下面这样的网页: 或者这样的

【Torch】nn.Linear算法详解

1. 定义 nn.Linear 是 PyTorch 中最基础的全连接(fully‐connected)线性层,也称仿射变换层(affine layer)。它对输入张量做一次线性变换: output x W T b \text{output} x W^{T} b outputxWTb 其中&a…

ZGC收集器

ZGC收集器 欢迎来到我的博客:TWind的博客 我的CSDN::Thanwind-CSDN博客 我的掘金:Thanwinde 的个人主页 0.前言 ZGC收集器完全可以说是Java收集器的一个跨时代的收集器,他真正意义上实现了停顿时间在10ms以内并且几乎全时段都是…

隧道技术篇2frp代理nps代理shisel代理

FRP代理 1.实现湖北内网控制北京的内网C2上线 2.实现湖北内网探针北京内网 信息收集 (socks建立和端口映射) 1.连接47.98.210.85 7000端口服务端 2.尝试将服务端的6666转到127.0.0.1 5555采用tcp协议,备注名proxies serverAddr"47.98…

[Python 基础课程]PyCharm 的安装

Python 的编辑器目前主流的有 PyCharm 和 Vscode。 PyCharm 是 Python 目前最主流、最常用、最推荐的 Python 编辑器。 https://www.jetbrains.com/pycharm/ PyCharm 有社区版和专业版,可以根据自己的需要下载对应的版本。社区版是收费的,对于初学者或…

Spread Ribbon 工具栏控件:在WinForms中高效编辑Spread工作簿

引言 在数据密集型应用中,电子表格功能是提升用户体验的关键要素。GrapeCity Spread.NET V17 推出的独立 Ribbon工具栏控件,为WinForms开发者提供了与Excel高度一致的UI交互体验。通过集成此控件,用户可直观地进行数据编辑、格式调整等操作&…

leedcode:找到字符串中所有字母异位词

问题:给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 package com.text;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;…

华为云Flexus+DeepSeek征文|基于华为云 Flexus Dify平台开发AI Agent的详细流程

目录 一、Dify 应用开发平台 1.1 什么是 Dify? 1.2 Dify 平台优势 二、构建 AI Agent 2.1 创建智能客服助手 2.2 配置 LLM组件 三、访问智能应用 3.1 应用发布 3.2 智能对话 四、API 调用智能客服助手 4.1 配置 API 访问接口 4.2 调用智能客服助手API …

【知识图谱构建系列7】:结果评价(1)

文章目录 前言前情提要三元组提取结果评价脚本代码分析几分钟后前言 翻了一下记录,发现咱的知识图谱构建已经接近10天没有搞了。时间也是过得真快啊。但这毕竟是咱未来产生论文的主要阵地,所以得赶紧把节奏给拾起来哈~ 前情提要 我们已经可以在mistral模型的基础上,跑通提…

BT下载工具 qBittorrent v5.1.1.10,便携无广告,BT下载速度翻倍

[软件名称]: BT下载工具 qBittorrent v5.1.1.10 [软件大小]: 15.9 MB [下载通道]: 夸克盘 | 迅雷盘 软件介绍 🔥《qBittorrent增强版》v5.1.1.10便携版|BT下载神器,速度与隐私兼得🌐 ✨ 核心优势: ✅ 无视版权限制…

裂变与重构:2025年大模型生态全景透视及未来趋势研判

1. 2025上半年:大模型生态的裂变时刻 1.1 技术范式革命:从生成到推理的跨越 2025年1月DeepSeek的横空出世,标志着大模型正式进入"推理时代"。这款国产模型在发布首周即突破1亿用户量级,其核心突破在于将传统生成能力升…

【docker】如何正确拉取langgraph-api

加这些配置都没用 # 设置代理环境变量 export HTTP_PROXY=http://127.0.0.1:7890 export HTTPS_PROXY=http://127.0.0.1:7890 # 设置更长的超时时间 export DOCKER_CLIENT_TIMEOUT=

PIXHAWK(ardupilot4.52)上传航点的bug

起因是查看飞控日志时发现地面站上传的平行航线,在日志看到航线却并不是平行的。 然后对比了一下地面站上传的航点信息跟飞控读取到的航点信息 发现经纬度只有前几位能够对应上,后几位都对应不上,两个点之间相差了50公分。地面站工程师认为地…

车载ECU刷写文件格式汇总详解

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从&#x…

Redis核心知识详解:从全局命令到高级数据结构

一、Redis全局命令详解 1.1 键查看与管理 dbsize:高效获取键总数(O(1)操作) 127.0.0.1:6379> dbsize (integer) 8 keys:生产环境避免使用(O(n)操作) # 查找user开头的键(不推荐生产使用…

【网络】Linux 内核优化实战 - net.ipv4.tcp_mem

目录 参数结构与含义与缓冲区大小参数的区别内存管理机制详解1. 内存使用状态与触发逻辑2. 与其他参数的协同关系 典型调整场景与配置示例场景 1:高并发低带宽服务(如 API 网关,数万连接但单连接流量小)场景 2:高带宽低…

插入排序的简单介绍

今天给大家简单介绍一下插入排序。 插入排序,其基本思想是将未排序的数据逐步插入到已排序序列中的合适位置,从而使整个序列逐渐有序。 下面我们看一个排序的过程(升序),给定一个int类型的数组,利用插入排…