Как избежать менее точной суммы для массивов с несколькими столбцами

ead спросил: 11 марта 2019 в 07:43 в: python

Я всегда предполагал, что numpy использует своего рода парное суммирование, которое обеспечивает высокую точность также для операций float32 -:

import numpy as np
N=17*10**6  # float32-precision no longer enough to hold the whole sum
print(np.ones((N,1),dtype=np.float32).sum(axis=0))
# [17000000.], kind of expected

Однако выглядит так, как будто используется другой алгоритм, если матрица имеет более одного столбца:

print(np.ones((N,2),dtype=np.float32).sum(axis=0))
# [16777216. 16777216.] the error is just to big
print(np.ones((2*N,2),dtype=np.float32).sum(axis=0))
# [16777216. 16777216.] error is bigger

Вероятно, sum просто наивно суммирует все значения. Это означает, что 16777216.f+1.0f=16777216.f, например:

one = np.array([1.], np.float32)
print(np.array([16777215.], np.float32)+one)  # 16777216.
print(np.array([16777216.], np.float32)+one)  # 16777216. as well

Почему numpy не использует парное суммирование для нескольких столбцов и может быть вынуждено использовать numpy для использования парного суммирования также для нескольких столбцов?


Моя версия numpy - 1.14.2, если это играет роль.

0 ответов