Несогласованная точность печати numpy-массивов

#python #numpy

#python #numpy

Вопрос:

У меня печатаются эти два массива.

 array([[-7.00e 00, -9.00e 00,  0.00e 00,  1.60e 01,  0.00e 00, -9.00e 00, -7.00e 00, -1.20e 01],
       [-6.00e 00, -1.70e 01,  1.11e-15,  2.00e 01,  1.33e-15, -1.70e 01, -6.00e 00,  2.00e 00],
       [-3.00e 00, -1.90e 01,  1.00e 01,  2.80e 01,  1.00e 01, -1.90e 01, -3.00e 00,  2.40e 01],
       [ 6.00e 00,  0.00e 00,  1.40e 01,  1.60e 01,  1.40e 01,  1.78e-15,  6.00e 00,  2.40e 01],
       [-3.00e 00, -1.90e 01,  1.00e 01,  2.80e 01,  1.00e 01, -1.90e 01, -3.00e 00,  2.40e 01],
       [-6.00e 00, -1.70e 01, -1.11e-15,  2.00e 01,  4.44e-16, -1.70e 01, -6.00e 00,  2.00e 00],
       [-7.00e 00, -9.00e 00,  0.00e 00,  1.60e 01,  8.88e-16, -9.00e 00, -7.00e 00, -1.20e 01],
       [-1.40e 01, -2.20e 01,  6.00e 00,  3.20e 01,  6.00e 00, -2.20e 01, -1.40e 01, -4.00e 00]])
  
 array([[ -9.96, -29.6 ,  -7.68,  47.32],
       [-11.7 , -17.86, -10.47,  25.97],
       [ 28.45, -22.42,  -9.69,  46.16],
       [ 42.94,  -2.22,  11.06,  40.59]])
  

При регистрации их типа они оба являются float64. Интересно, почему одно является научным обозначением, а не другое. Кроме того, как настроить его так, чтобы он всегда имел вторую нотацию.

У меня это есть в верхней части моего скрипта

 np.set_printoptions(linewidth=240, precision=2)
  

Но, по-видимому, это выполняется не во всех случаях.

Комментарии:

1. Вы каким-то образом объявляете массивы равными numpy ?

2. ДА. Оба они происходят из обработки numpy массивов.

3. И я также могу подтвердить с помощью type(out1) и type(out2) возврата numpy.ndarray

4. numpy использует научную нотацию, когда диапазон значений широк. Отобразите, например, первую строку, в которой нет никаких e-15 значений.

Ответ №1:

Некоторые элементы первого массива крошечные, как этот:

 -1.11e-15
  

e-15 Означает «умноженный на 10 в степени -15». Для отображения в обычной позиционной системе счисления потребовалась бы тонна цифр, поэтому NumPy переключается на научную систему счисления. Для согласованности макета это относится ко всему массиву.

Вместо этого вы можете использовать логику печати массива NumPy для обработки этих значений как нулевых (с соответствующим знаком), установив для suppress параметра печати значение True :

 numpy.set_printoptions(suppress=True)
  

Комментарии:

1. Можно ли каким-то образом использовать suppress для округления и в то же время сохранить десятичные разряды coupe для точности? Подавление приводит к array([[ -7., -9., 0., 16., 0., -9., -7., -12.], ....]