执行2D x 1D矩阵乘法的有效方法

时间:2017-05-30 17:03:13

标签: python numpy

我正在尝试执行2D乘1D矩阵乘法。具体做法是:

import numpy as np

s = np.ones(268)
one_d = np.ones(9422700)
s_newaxis = s[:, np.newaxis]
goal = s_newaxis * one_d

虽然上面的尺寸与我的问题((268, 1)(9422700,))相同,但我的数组中的实际值是非常大和非常小的数字的混合。因此,我可以运行goal = s_newaxis * one_d,因为只有1个存在。但是,我使用我的实际数据耗尽ram

我认识到,在一天结束时,这相当于一个价值约25亿的矩阵,因此预计会有大量的内存占用。但是,效率方面的任何改进都是受欢迎的。

为了完整起见,我已经包含粗略尝试。它不是很优雅,但它只是一个改进,它不会让我的计算机崩溃(不可否认的是低吧)。

import gc

def arange(start, stop, step):
    # `arange` which includes the endpoint (`stop`).
    arr = np.arange(start=start, stop=stop, step=step)
    if arr[-1] < stop:
        return np.append(arr, [stop])
    else:
        return arr

left, all_arrays = 0, list()
for right in arange(0, stop=s_newaxis.shape[0], step=10):
    chunk = s_newaxis[left:right,:] * one_d
    all_arrays.append(chunk)
    left = right
    gc.collect()  # unclear if this makes any difference...I suspect not.

goal = np.vstack(all_arrays)

0 个答案:

没有答案