【问题标题】:Speeding slicing of big numpy array加速大numpy数组的切片
【发布时间】:2012-05-15 16:12:57
【问题描述】:

我有一个存储在 pyTables 文件中的大数组 ( 1000x500000x6 )。我正在对其进行一些在速度方面进行了相当优化的计算,但最耗时的是数组的切片。

在脚本的开头,我需要获取行的子集:reduce_data = data[row_indices, :, :] 然后,对于这个缩减的数据集,我需要访问:

  • 一列一列:reduce_data[:,clm_indice,:]
  • 列的子集:reduce_data[:,clm_indices,:]

获取这些数组需要很长时间。有什么办法可以加快速度吗?例如以不同的方式存储数据?

【问题讨论】:

  • 我认为您应该尝试按行获取它们,因为这是(我相信)它们在文件中的排序方式。在这么大的桌子上,它可以产生很大的不同。
  • PyTables 数据是存储在表还是数组中?
  • @dtlussier 数据存储在压缩的 Carray 中。
  • @Lior 我考虑过这一点,但我也按行访问数据,因此它将问题从我的脚本中间移到开头......但是,因为还有更多行的列,也许它会加快转置数据的速度。
  • 对于数组-我认为@pv。下面的答案是一个好的开始。可以存储为表格吗?这将允许以类似于数据库查询的方式更轻松地访问列或行子集。

标签: python numpy slice pytables


【解决方案1】:

您可以尝试明智地选择阵列的chunkshape,请参阅:http://pytables.github.com/usersguide/libref.html#tables.File.createCArray 此选项控制数据在文件中物理存储的顺序,因此它可能有助于加快访问速度。

如果运气好的话,对于您的数据访问模式,chunkshape=(1000, 1, 6) 之类的东西可能会起作用。

【讨论】:

  • 我尚未对此进行测试,但我将其标记为最佳答案,因为它为我指出了一个我自己从未见过的有趣选项。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-19
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 2011-08-30
  • 1970-01-01
相关资源
最近更新 更多