首页 > 解决方案 > 提高大矩阵自举算法的效率

问题描述

我正在努力提高用 python 编写的引导算法的效率。当矩阵的大小相对较小时,计算速度还可以,但当 n 和 k 较大时,计算速度会明显变慢。

因为算法本质上是数组操作,是否有办法通过优化算法本身或重写它来提高它的效率,以便使用 pycuda/tensorflow 等包,因为 GPU 资源是可访问的?

import numpy as np
n = 5000
k = 3000
ary = np.random.choice([0,1],size=(n,k))
lst = []
cols = list(range(ary.shape[1]))
while len(lst) < ary.shape[1]:
    print(len(lst), ary.shape[1])
    a = [lst+[x] for x in cols]
    b = [ary[:,x] for x in a]
    c = np.asarray(b)
    d = c.sum(axis=2)
    d = np.repeat(d[..., None], c.shape[-1], 2)
    d1 = np.divide(c, d)
    d2 = np.nanmean(d1, axis=1)
    d2 = np.nan_to_num(d2)
    d3 = d2[:, -1]
    d4 = d3 / np.sum(d3)
    lst.extend([np.random.choice(cols, p=d4)])
    print(d4.shape)
    print(lst)

标签: pythonalgorithmnumpytensorflow

解决方案


推荐阅读