Я рассчитываю средневзвешенное расстояние между многомерными точками для большого количества наблюдений. Скажем, n = 2000 наблюдений, а размерность (число признаков) каждой точки d = 5000. Фактический код:
# A - the weights matrix (each row corresponds to a feature, each column corresponds to an observation)
# D - distance matrix between featires (all vs all)
AA = A[:, np.newaxis] * A[np.newaxis, :]
R = AA * D[:, :, np.newaxis]
S = R.sum(axis=(0, 1))
Таким образом, результирующий массив S представляет собой список из n чисел с плавающей запятой (размер в байтах: s = 8). Однако во время вычислений нам нужно выделить память для AA, которая равна n * d ^ 2 * s = огромное количество ...
Я не хочу использовать циклы, потому что эта процедура выполняется несколько раз ( ~ 400), поэтому любой код Python резко увеличит время выполнения.
Есть идеи?