更快的 numpy 笛卡尔到球坐标转换?

2024-01-04

我有来自 3 轴加速度计 (XYZ) 的 300 万个数据点数组,我想向包含等效球面坐标 (r、theta、phi) 的数组添加 3 列。下面的代码可以工作,但看起来太慢了。我怎样才能做得更好?

import numpy as np
import math as m

def cart2sph(x,y,z):
    XsqPlusYsq = x**2 + y**2
    r = m.sqrt(XsqPlusYsq + z**2)               # r
    elev = m.atan2(z,m.sqrt(XsqPlusYsq))     # theta
    az = m.atan2(y,x)                           # phi
    return r, elev, az

def cart2sphA(pts):
    return np.array([cart2sph(x,y,z) for x,y,z in pts])

def appendSpherical(xyz):
    np.hstack((xyz, cart2sphA(xyz)))

这类似于贾斯汀·皮尔 https://stackoverflow.com/questions/4116658/faster-numpy-cartesian-to-spherical-coordinate-conversion/4116803#4116803的答案,但仅使用numpy并利用其内置矢量化:

import numpy as np

def appendSpherical_np(xyz):
    ptsnew = np.hstack((xyz, np.zeros(xyz.shape)))
    xy = xyz[:,0]**2 + xyz[:,1]**2
    ptsnew[:,3] = np.sqrt(xy + xyz[:,2]**2)
    ptsnew[:,4] = np.arctan2(np.sqrt(xy), xyz[:,2]) # for elevation angle defined from Z-axis down
    #ptsnew[:,4] = np.arctan2(xyz[:,2], np.sqrt(xy)) # for elevation angle defined from XY-plane up
    ptsnew[:,5] = np.arctan2(xyz[:,1], xyz[:,0])
    return ptsnew

请注意,正如评论中所建议的,我已经改变了仰角的定义从你原来的功能。在我的机器上,测试pts = np.random.rand(3000000, 3),时间从 76 秒缩短到 3.3 秒。我没有 Cython,所以我无法将时间与该解决方案进行比较。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更快的 numpy 笛卡尔到球坐标转换? 的相关文章

  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • 如何将光流场(float)映射到像素数据(char)以进行图像扭曲?

    我一直在研究 OpenCV 中的光流函数 但遇到了困难 我已经使用 Farneback 方法成功生成了 X 和 Y 光流场 图 但我不知道如何将其应用于输入图像坐标以扭曲图像 生成的 X 和 Y 字段为 32 位浮点类型 0 1 0 但是如
  • Flutter导航,重新打开页面而不是再次推送

    我是 flutter 新手 正在开发一个具有多个屏幕的应用程序 我想知道如何阻止颤动创建同一路线的多个屏幕 例如我有Page 1 and Page 2 如果我单击按钮导航到第 2 页 然后再次单击同一按钮 应用程序将推送一个新屏幕Page
  • WSDL 最佳实践

    我正在开发一个与第三方集成的 SOAP 应用程序 我觉得这个第三方的WSDL很奇怪 我对 SOAP 还很陌生 所以如果它没有损坏 我不想要求他们修复它 以下是我注意到的一些我认为错误的事情 尽管我确信它在技术上是有效的文档 因此我在标题中写
  • 插页式广告显示黑色 (->) AFMA_ReceiveMessage 未定义 (:1)

    我跟着Android添加插页式广告官方指南 https developers google com admob android interstitial 如果我使用测试模式 AdRequest adRequest new AdRequest
  • 如何让 pip 指向较新版本的 Python

    我有两个版本Python安装在我的centOS服务器 ethan demo python2 6 version Python 2 6 6 ehtan demo python version Python 2 7 3 一些基本功能需要旧版本
  • Git diff 命令显示整个文件已修改,而不是显示修改的一小部分代码

    我正在使用 git 存储库 除了 git diff 命令之外 一切正常 每当我修改任何文件时 即使我修改了一小部分代码 git diff 命令也会显示整个文件被修改 git diff 显示整个文件修改而不是一小部分代码的原因可能是什么 还让
  • 将 ng-options 绑定到远程 JSON 数据?

    使用 AngularJS 我想将选择选项绑定到远程数据源 同时跳过对中间字段的需要 我不确定这是否可能 例如 我理想的 HTML 是
  • 使用 pandas 的绘图方法在 1 行中绘制图表时出现问题

    假设我想在 1 行中绘制 3 个图 依赖关系cnt来自其他 3 个功能 Code fig axes plt subplots nrows 1 ncols 3 figsize 15 10 for idx feature in enumerat
  • React-dnd 多个元素

    我可以轻松地进行react dnd拖动 让单个元素可以拖动 但是我有4个字段的数组 我想使其可拖动 在下面的示例代码中 它通过映射数组创建四个框 每个框都有一个 element 的类名 这应该使它们都可以拖动 但它们不会移动 这是我的拖动代
  • 对话框中的Viewpager?

    我正在尝试创建一个对话框 您可以在其中单击 下一步 按钮以向右滑动到下一个屏幕 我正在使用 ViewPager 和适配器来做到这一点 final Dialog dialog new Dialog this dialog requestWin
  • 协变对象初始值设定项?

    假设我有一个类 它的属性是字典 使用对象初始值设定项我可以使用以下语法 我认为看起来很干净 new MyClass Table test true test false 但是 在初始化程序之外我不能这样做 this Table test t
  • 点击颤动时停止 GIF 动画

    我是颤振的新手 我尝试在单击时暂停 GIF 图像的动画 并在第二次单击时恢复动画 但我不知道如何在 flutter 中实现它 我为此使用资产图像 Image asset images xyz gif 但问题是图像不断动画 因此 任何人都知道
  • 带 ID 的脚本标签?

    大多数现代浏览器是否支持脚本标签中的 id 例如 我问的原因是 Eclipse 显示一条警告 指出 未定义的属性名称 但当我使用 jQuery 选择器获取脚本元素的其他属性时 它在 Google Chrome 中工作正常 W3Schools
  • 对于具有compileOnly依赖项的单元测试,如何避免在运行时重新声明可用性的依赖项?

    我目前正在使用 Gradle 构建一个项目 它依赖于 我在编译时需要的第三方组件 但将在运行时提供 在 Maven 中我会将这种依赖声明为provided 在 Gradle 中我将其声明如下 compileOnly group org ap
  • 在迭代到循环的下一次迭代之前完成 FOR 循环内的所有函数

    假设我有一个类似的功能 var bigArray 1 2 3 4 5 n for var i 0 i
  • MKMapView MKPointAnnotation 点击​​事件

    我有一个注释列表 MKPointAnnotation 我有一个用于整个视图的 UIViewController MKMapView 实现控制器 我认为它对于检测用户与地图的交互很有用 我自己的 MKPointAnnotation 实现 子类
  • 具有不同列名的 pandas 数据帧上的 pd.corrwith

    我想以有效的方式获得 x1 和 y 中三列中每一列之间的皮尔逊 r 看来 pd corrwith 只能计算具有完全相同列标签的列 例如x 和 y 这似乎有点不切实际 因为我认为计算不同变量之间的相关性将是一个常见问题 In 1 import
  • 在Java中清除控制台屏幕[重复]

    这个问题在这里已经有答案了 是否有任何选项可以像 C 中的 clrscr 一样清除 Java 中的控制台屏幕 作为肮脏的黑客 我喜欢 msparer 的解决方案 我见过的一种更肮脏的方法 我自己永远不会这样做 我发誓 真的 是向控制台写入一
  • jQuery 未加载

    我正在使用 php 当我在谷歌服务器上使用 jquery 1 3 2 min js 时 它会加载并且一切运行正常 但是当我尝试使用我下载到我的服务器上的那个时 Firebug 给了我这个 1 2 3 4 5 h1 Forbidden h1
  • 更快的 numpy 笛卡尔到球坐标转换?

    我有来自 3 轴加速度计 XYZ 的 300 万个数据点数组 我想向包含等效球面坐标 r theta phi 的数组添加 3 列 下面的代码可以工作 但看起来太慢了 我怎样才能做得更好 import numpy as np import m