【问题标题】:best practice for multidimensional arrays in pythonpython中多维数组的最佳实践
【发布时间】:2019-08-16 07:41:17
【问题描述】:

假设我有一个我希望保存在 python 中的对象集合,比如说,一个数字列表:[0.12, 0.85, 0.11, 0.12], [0.23, 0.52, 0.10, 0.19] 等。进一步假设这些对象由 3 个属性索引,例如“origin”、“destination”和“month”。我希望将这些对象存储在一个可以轻松切片的类数组对象中,最好使用数字索引或名称。

所以,即,

obj[2,1,7] # might return: [0.23, 0.52, 0.10, 0.19]

或者,

obj['chicago','new york','jan'] # might return: [0.12, 0.85, 0.11, 0.12]

还有,

obj[:,'new york','jan'] # would return data with first index = any.

我正在寻找在 python 中实现这一目标的最佳实践。我确实找到了this 帖子,这似乎很合适,但它似乎需要一些开销,并且几乎没有讨论替代方案。我还发现了一个名为xarray 的包,尽管它似乎不那么受欢迎。我正在从 R 转换,我将在其中执行 array() 函数,它为任何类似向量的结构添加多维索引。

【问题讨论】:

  • 我很确定你可以用 pandas 做你想做的事,但是访问这些值会比你写的稍微复杂一些
  • 熊猫可以做到。否则,请查看结构化 numpy 数组:docs.scipy.org/doc/numpy/user/basics.rec.html
  • pandas 专门用于二维“表格”数据,尽管它确实支持分层索引。如果您想要真正的多维标记索引,请使用 xarray
  • 你想要什么是熊猫不能做的?还是你对熊猫不熟悉?
  • @Novice 他们想要的不仅仅是二维。 pandas 弃用了 3-D Panel,文档甚至建议 xarray

标签: python pandas numpy multidimensional-array python-xarray


【解决方案1】:

经过一番摸索,看来 xarray 适合我的需要。不幸的是,由于我缺乏经验,我无法谈论与其他软件包的兼容性或性能。

import numpy as np
import xarray as xr
cityOrig = ['chicago','new york', 'boston']
cityDest = ['chicago','new york', 'boston']
month = ['jan','feb','mar','apr']
data = np.random.rand(4,3,3,4)

myArray = xr.DataArray(data,
                       dims=['dat','orig','dest','month'],
                       coords = {'orig':cityOrig,'dest':cityDest,'month':month})

print(myArray[:,1,2,1].data)
[0.64  0.605 0.445 0.059]
print(myArray.loc[:,'chicago','new york','jan'].data)
[0.64  0.605 0.445 0.059]

【讨论】:

猜你喜欢
  • 2014-06-04
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 2023-03-13
  • 2014-03-02
  • 1970-01-01
  • 2011-04-25
  • 2016-03-10
相关资源
最近更新 更多