【问题标题】:Creating a randomized circle from points in R/MatLab从 R/MatLab 中的点创建一个随机圆
【发布时间】:2018-07-19 18:35:45
【问题描述】:

我正在和我大学的一位教授做一些研究,他要求我为拓扑数据分析 (TDA) 的目的创建一些数据。

我使用了来自 R 和 MatLab 的两个包,但是作者似乎对在执行与 Betti 点的持久性相关的操作时如何随机化数据有类似的想法。

R(和 MatLab)中的问题是圆是通过以下方式创建的:

X <- circleUnif(n=30)

这会生成一个具有均匀分布的点 (30) 的圆,该圆围绕中心点具有相等的半径。为了使数据随机化,包作者的两个示例都从数据中随机抽样。这导致图像如下所示: Alpha Complex 教授问的是我让每个点都有一些“西格玛”或偏离半径的偏差。这实质上会创建一个具有一定厚度的“模糊”环。这样,当对数据执行持久化时,出生/死亡轴的输出会更有趣。

在这个视频中大约 2:30 是我想要做的事情的一个想法: Persistent homology

如果有人知道如何在 Python 中做到这一点,我也愿意尝试其他语言。

【问题讨论】:

  • 那么你想给半径添加一个均匀分布的随机值吗?为什么这么难?到目前为止,您尝试过什么?
  • 我从另一个有 R 经验的人那里得到了帮助,并且能够使用一些基本的三角函数创建随机圆。感谢大家的帮助!
  • 请不要在 Stack Overflow 上发布像 paste.ofcode.org 这样的临时内容。

标签: python r matlab random topology


【解决方案1】:

只要您安装了 numpy,以下内容应该可以正常工作(如果您没有安装,请在命令行中使用 pip install numpy)。

import numpy as np

def circleUnif(n=30, radius=1, sigma=0, center=(0, 0)):
    radii = np.random.randn(n) * sigma + radius
    angles = np.random.rand(n) * np.pi * 2

    x = radii * np.cos(angles)
    y = radii * np.sin(angles)

    return np.transpose([x, y]) + center

作为示例用法:

>>> X = circleUnif(3, 1, 0, (2, 3))
>>> print X
[[1.29321773 3.70743115]
 [2.72817308 3.68539329]
 [2.35728855 2.06600595]]

不过,根据我的经验,python 在拓扑数据分析方面的成熟度不如 R。使用 python 中可用的数据科学工具没有任何问题,如果您愿意,您可以使用 python 生成数据以在 R 中使用。但这是 Python 真正缺乏用于数据科学任务的质量、稳定工具的少数实例之一。我最终可能会做一些,或者其他人可能会做一些,但你现在对于大多数 TDA 算法没有太多选择。

【讨论】:

  • 我通过 R 找到了解决方案,但是我对 Python 的潜力很感兴趣。如果我尝试通过 Python 解决方案,我可能会在未来尝试您的想法。
猜你喜欢
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多