【发布时间】:2019-02-24 22:21:06
【问题描述】:
我有一个 np.array 的观察值 z,其中 z.shape 是 (100000, 60)。我想有效地计算 100000x100000 相关矩阵,然后将这些元素的坐标和值写入磁盘 > 0.95(这只是总数的一小部分)。
我的蛮力版本如下所示,但毫不奇怪,它非常慢:
for i1 in range(z.shape[0]):
for i2 in range(i1+1):
r = np.corrcoef(z[i1,:],z[i2,:])[0,1]
if r > 0.95:
file.write("%6d %6d %.3f\n" % (i1,i2,r))
我意识到使用 np.corrcoef(z) 在一次操作中可以更有效地计算相关矩阵本身,但是内存需求很大。我也知道,可以将数据集分解为块并一次计算相关矩阵的小部分,但编程和跟踪索引似乎不必要地复杂。
是否有另一种方式(例如,使用 memmap 或 pytables)既易于编码又不会对物理内存提出过多要求?
【问题讨论】:
-
请强调您谈的是内存效率
-
如果有效,会不会“过于复杂”?
-
如果有一种 Python 的方式来实现这一点,这将是不必要的复杂,它需要的编码工作量大大减少,因此也不太容易出现编码错误。
标签: numpy correlation large-data