Numpy: 功能请求:添加到变换坐标系的 numpy 简单函数

创建于 2014-10-24  ·  14评论  ·  资料来源: numpy/numpy

将这些函数作为 numpy数学例程的一部分会很方便。

cart2pol -- 将笛卡尔坐标转换为极坐标

def cart2pol(x, y):
    theta = np.arctan2(y, x)
    rho = np.hypot(x, y)
    return theta, rho

pol2cart -- 将极坐标转换为笛卡尔坐标

def pol2cart(theta, rho):
    x = rho * np.cos(theta)
    y = rho * np.sin(theta)
    return x, y

cart2sph -- 将笛卡尔坐标转换为球坐标

def cart2sph(x, y, z):
    hxy = np.hypot(x, y)
    r = np.hypot(hxy, z)
    el = np.arctan2(z, hxy)
    az = np.arctan2(y, x)
    return az, el, r

sph2cart -- 将球面坐标转换为笛卡尔坐标

def sph2cart(az, el, r):
    rcos_theta = r * np.cos(el)
    x = rcos_theta * np.cos(az)
    y = rcos_theta * np.sin(az)
    z = r * np.sin(el)
    return x, y, z
01 - Enhancement numpy.lib

最有用的评论

我明白你在说什么。 然而,这些函数在几何算法、计算机图形软件等中使用坐标系时经常使用。很少需要对 n 维进行泛化。 在 MATLAB 中存在这些函数,我应该说,它们相当方便。 我将这些函数视为简单的数学例程,例如函数 rad2deg 和 deg2rad。 如您所知,这些函数是经常使用的函数,并且存在于 numpy.

所有14条评论

我不确定这是否需要在 numpy 中,这些功能足够简单,可以最佳地实现自己。
如果我们添加它们,我们是否绘制了要添加哪些转换的线? 它们的数量是无限的。

即使我们只在球面变换上画线,这里也没有表示许多不同的约定。 我相信这些函数更适合在内部实际使用它们的包(例如astropy)并通过其代码遵循特定约定。

我明白你在说什么。 然而,这些函数在几何算法、计算机图形软件等中使用坐标系时经常使用。很少需要对 n 维进行泛化。 在 MATLAB 中存在这些函数,我应该说,它们相当方便。 我将这些函数视为简单的数学例程,例如函数 rad2deg 和 deg2rad。 如您所知,这些函数是经常使用的函数,并且存在于 numpy.

作为一般规则,在 numpy 中肯定有一席之地用于基本实用程序
东西。 显然有一个关于在哪里画线的问题,
但我们这样做并且应该至少包括一些这样的东西。 (作为一个极端
例如,我们为什么要导出 np.pi? 用户重新实现是微不足道的,如果
他们需要它……但强迫他们这样做是一种令人讨厌的浪费
他们的时间。)

所以如果我们要画一条线,我们实际上应该基于一些
原则 IMO。

这些简单助手需要考虑的一些潜在标准:

  • 它们是否针对广泛的用户类别?
  • 这些用户是否使用相同的约定?
  • 只有一个明显的api吗?
  • 只有一种最佳实现吗?
  • 在达到这个最佳状态时有什么烦人的吗
    执行? (请注意,OP 的 pol2cart 会制作不必要的副本。)
  • 它们会成为我们持续的维护负担吗? (这有点
    以上几点的超集。)

我认为这些功能在这些标准上得分很高。 每个人都使用
极坐标有时,没有人会抱怨我们实施了
他们错了,每次需要它们时仔细检查公式是
烦人的时间浪费等

我不确定的一件事是每个人是否都使用相同的约定
用于球面坐标和笛卡尔坐标之间的映射 - 有人知道吗?
我可以想象不同的社区有不同的标志约定或
无论如何,我自己几乎不使用它们。
2014 年 10 月 24 日 21:04,“Evgeny Prilepin” [email protected]写道:

我明白你在说什么。 但是,这些功能被使用
经常在使用几何坐标系时
算法、计算机图形软件等 n 维的泛化
很少需要。 在 MATLAB 中存在这些函数
http://www.mathworks.com/help/matlab/cartesian-coordinate-system-conversion.html
而且,我应该说,它们相当方便。 我认为这些功能
作为简单的数学例程,例如,函数 rad2deg 和
度 2 度。 如您所知,这些函数是常用的函数,并且
存在
http://docs.scipy.org/doc/numpy/reference/generated/numpy.rad2deg.html#numpy.rad2deg
在麻木。


直接回复此邮件或在 GitHub 上查看
https://github.com/numpy/numpy/issues/5228#issuecomment -60441622。

不幸的是,确实有很多用于处理球坐标的约定: http ://en.wikipedia.org/wiki/Spherical_coordinate_system

我认为最好让用户自己定义他们想要的特定球坐标变换。

还有一个 ISO 标准指定了“正确”格式是什么......我不认为多个约定真的是一个问题,只要清楚地记录返回的内容:从一个约定切换到另一个约定要容易得多而不是将笛卡尔坐标转换为任何一种可能的球坐标系。

另一方面,我不认为 numpy 中的这种拟合是少数独立功能。 极坐标,尤其是与复数相关的,可能,但球坐标,不是真的。

好吧,我更倾向于同意你的看法。 我们现在不讨论球坐标的功能。 然而,在许多情况下可以应用极坐标的函数。

np.linalg.norm中实施了 5 种不同的规范? 我不明白为什么不能添加一些坐标转换。 即使在没有选项的情况下完成,我认为没有任何关于简单 x,y -> r*cos(theta),sin(theta) 及其逆的有效性有效性的严肃讨论。 如果这不是世界上最常用和最直接的坐标变换,我会感到惊讶。

另一方面,我不认为 numpy 中的这种拟合是少数独立功能。 极坐标,尤其是与复数相关的,可能,但球坐标,不是真的。

同意这一点。 大多数人似乎对添加极坐标变换持中立态度。 因此,如果有人想提出具体的建议,然后着手实施,我认为这是值得欢迎的。

其他一些想法:

  • 即使对于极坐标,也有一些约定需要清楚地记录(以度或弧度为单位的角度,以[0, 2pi)[-pi, pi)单位)。 我可能更喜欢[-pi, pi)
  • 我们可以考虑将函数放在numpy.lib命名空间而不是顶层numpy之一。

在我们讨论 astropy 中坐标变换的加速时发现了这一点(https://github.com/astropy/astropy/pull/5735),我想知道sincos (#2626)和“指数”发生了什么只是一个虚数”(#5625)。

一个建议可能是从遵循cmath [1] 开始并介绍np.rectnp.polar ,然后从这些开始工作(目前,我们涵盖了除这两个和np.phase之外的所有内容cmath )。

[1] https://docs.python.org/3.5/library/cmath.html#conversions-to-and-from-polar-coordinates

这些助手的 3D 版本也会有所帮助。

你好,我是新来的,因为我是深度学习,所以我有这个问题。
我正在使用 tensorflow 来检测带有静止的 USB 高清摄像头的物体。
我得到了对象中心的坐标,我希望机器人去那些坐标,我应该为此使用哪种转换?
在机器人上,我使用的是手动笛卡尔坐标的 XYZ 坐标。 不确定我从 tensorflow、笛卡尔、像素或什么得到什么坐标?

谢谢

@fdkssdks问这些问题的地方不对,试试stackoverflow。

或者在这里: Tensorflow API 文档

此页面是否有帮助?
0 / 5 - 0 等级