【发布时间】:2021-02-16 02:05:18
【问题描述】:
我想从 parquet 文件中加载一个巨大的矩阵,并将距离计算分布在多个节点上,以节省内存并加快计算速度。
所以输入数据拥有 42 000 行(特征)和 300 000 列(样本):
| X | sample1 | sample2 | sample3 |
|---|---|---|---|
| feature1 | 0 | 1 | 1 |
| feature2 | 1 | 0 | 1 |
| feature3 | 0 | 0 | 1 |
在此处放置标题列和行来描述输入数据
所以我还拥有一个样本列表 [sample1,sample2,sample3…],这可能会有所帮助(通过使用 itertools.combinations 或其他方式)
我想对每对样本应用一个交换函数。 对于熊猫,我这样做:
similarity = df[df[sample1] == df[sample2]][sample1].sum()
dissimilarity = df[df[sample1] != df[sample2]][sample1].sum()
score = similarity - dissimilarity
那么是否可以同时使用 numpy 的光线和广播方法来加速计算?
@Jaime answer's 非常符合我的需求。
也许我可以使用以下方法做 n 批样品:
batch1=[sample1,samlpe2,…]
data = pandas.read_parquet(somewhere, column=batch1 ).to_numpy()
感谢您的帮助
注1: 10个样本的输入数据可以这样模拟:
import random
import numpy as np
foo = np.array([[random.randint(0,1) for _ in range(0,10)] for _ in range(0,30000)])
注意 2: 我在一个节点上尝试了与 scipy 的空间距离,但内存不足。这就是为什么我想将计算拆分到多个节点上
【问题讨论】:
-
只是一个小评论 - 有一个形状为 N_features x N_samples 的数组很奇怪;通常是 N_samples x N_features。
-
感谢@StefanB,即使我的样本多于特征?
-
无论如何,如果出于性能原因,N_features x N_samples 更好。我也会接受这个答案。
-
在计算上无关紧要。这只是一个约定。
标签: python pandas numpy array-broadcasting ray