当前位置: 首页 > 面试题库 >

更快的numpy直角坐标到球坐标转换?

鲜于光辉
2023-03-14
问题内容

我有一个来自3轴加速度计(XYZ)的300万个数据点的数组,我想向该数组添加3列,其中包含等效的球坐标(r,theta,phi)。以下代码有效,但似乎太慢了。我该如何做得更好?

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)))

问题答案:

这类似于Justin Peel的答案,但是使用justnumpy并利用其内置的矢量化功能:

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,所以我无法将计时与该解决方案进行比较。



 类似资料:
  • 我正在尝试将球坐标转换为笛卡尔坐标,以绘制一个简单的三维金字塔。 下面是获取金字塔四个主要角的代码,具体取决于极角yrad和方位角xrad以及顶点坐标x和y: 方位角轴似乎工作正常,但问题是,在操纵极轴角时,当它们越过天顶或底部时,左右会互换,如图所示(选择顶部的mp4以更平滑地播放):http://gyazo.com/4a245713c232893960863cf4ea4186f6 怎么了?

  • 一个点的spherical coordinates(球坐标)。 构造函数 Spherical( radius : Float, phi : Float, theta : Float ) radius - 半径值,或者说从该点到原点的 Euclidean distance(欧几里得距离,即直线距离)。默认值为1.0。 phi - 与 y (up) 轴的极坐标角(以弧度为单位)。 默认值为 0。 th

  • 我使用的是平顶六边形网格(按照这里列出的手册http://www.redblobgames.com/grids/hexagons/)。 当然,在平顶的情况下,x坐标可以用作x像素坐标。因此,从立方体坐标计算X像素坐标相对容易。假设是十六进制的总宽度,是x、y、z坐标数组,则x像素坐标为: 我不知道如何计算y像素坐标。相邻HEX之间的高度应不足等于。但是如何基于立方体坐标计算偏移量呢?

  • 功能介绍 坐标转换(Convert)是从一种坐标系统变换到另一种坐标系统的过程,可以通过建立两个坐标系统之间一一对应的关系来实现,是各种比例尺地图测量和编绘中建立地图数学基础必不可少的步骤。坐标转换服务实现了四维高德坐标、百度坐标、搜狗等坐标之间相互转换的功能。 注:该服务不支持将偏移GPS坐标(如:百度坐标、高德坐标等)转换为未偏移GPS坐标。 适用场景 按需实现现有坐标系到需求坐标系之间的转换

  • 实现四维高德坐标、百度坐标、搜狗等坐标之间的转换。注意:不支持将偏移GPS坐标(如:百度坐标、高德坐标等)转换为未偏移GPS坐标。 使用服务前需要先申请 key。 资源服务地址:https://www.supermapol.com/iserver/services/coordconvert/rest/coordinate/convert 资源接口参数说明 坐标转换服务服务支持GET和HEAD请求,

  • 我想知道是否有人帮助我理解如何将顶部图像转换为底部图像。以下链接中提供了这些图像。顶部图像采用笛卡尔坐标。底部图像是极坐标中的转换图像