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.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類型的數組,利用插入排…