【问题标题】:How to describe data using NumPy?如何使用 NumPy 描述数据?
【发布时间】:2020-10-15 14:58:39
【问题描述】:

我有一个 Python 程序,其中大部分数据都保存在字典中,主要是因为我很容易理解逻辑和数据流。

这种解决方案的缺点是计算速度慢。我想使用 NumPy 库重写软件。 例如我有一个对象:

point = {"x": 0.323441, "y": 0.982531, "r": 12, "r": 42, "b": 241}

我可以将其重写为:

np.array([0.323441, 0.982531, 12, 42, 241])

这个例子很明显,但我担心如果数据更复杂,我很难理解数据的含义。

在 NumPy 中描述数据的最佳做法是什么?

【问题讨论】:

  • 我建议使用 Pandas DataFrame,其基础数据保存在 numpy 数组中,但提供更多可读的表。在您的示例中,每个都有一个列(我认为您可以将字典传递给 pandas DataFrame 构造函数
  • 在 NumPy 本身中,您还拥有structured arrays,它允许您为数据的不同“字段”命名。但是,正如建议的那样,Pandas 是一个更常见的选择(还有xarray 用于高维标记数据)。
  • 这不仅仅是点是什么,更重要的是你是否还有许多其他类似描述的点。对于 numpy 和 pandas,主要问题是您的数据是否由“列”很好地描述,其中每列中的值:1)是相同的类型,并且是 numpy 支持的类型(而不是object); 2)指的是相同的概念,但具有不同的价值; 3+) 其他我现在想不到的事情。也就是说,您将拥有points_xy = np.zeros((1000, 2))points_rgb = np.zeros((1000,3)) 而不是points,其中变量名称描述了它是什么(在Python 中很常见)。

标签: python numpy coding-style


【解决方案1】:

使用您的示例数据:

刚刚发现双重使用“r”变量,您的字典也不允许这样做

d = pd.DataFrame({"x": 0.323441, "y": 0.982531, "r": 12, "r_": 42, "b": 241}, index=[1])

结果:

          x         y   r  r_    b
1  0.323441  0.982531  12  42  241

【讨论】:

  • 1) 我是否总是需要明确提供索引? 2) Pandas DataFrame 上的操作和 NumPy 数组上的操作一样快吗?
  • 1) 如果字典值是向量,则不需要 - 在您的情况下,它们是标量,因此 Pandas 会出错。如果需要,我认为它适用于range(len(data))。 2) 几乎,如果速度确实成为问题,您始终可以通过调用d.values 来访问底层数据,这将为您提供一个 numpy 数组。 Pandas 和 DataFrame 对象有很多方法可以满足常见需求
猜你喜欢
  • 2018-09-27
  • 2016-03-21
  • 2016-11-29
  • 2021-02-08
  • 1970-01-01
  • 2020-04-11
  • 2013-12-21
  • 2012-10-16
  • 1970-01-01
相关资源
最近更新 更多