numpy.format, кажется, округляется до целого числа - PullRequest
0 голосов
/ 29 октября 2018

я пытаюсь отформатировать этот список, чтобы он оставался в научной нотации, но имеет меньше десятичных чисел. Но приведенный ниже скрипт, кажется, просто округляет все до ближайшего целого числа

import numpy
A=[9.380726789802627885e-23, 9.764534271051429814448e-23, 1.0168775777415136679e-22, 1.0573873175565650064e-22, 1.098630609702e-2, 1.14060439559859689e-22]
B=[]
for i in range(len(A)):
    c=numpy.format_float_scientific(i, precision=5)
    B.append(c)
print(B)

B распечатывается как

['0.e+00', '1.e+00', '2.e+00', '3.e+00', '4.e+00', '5.e+00']

я неправильно понимаю "точность"?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Ваш цикл неверен. В вашем коде это должно выглядеть примерно так:

import numpy
A=[9.380726789802627885e-23, 9.764534271051429814448e-23, 
   1.0168775777415136679e-22, 1.0573873175565650064e-22, 
   1.098630609702e-2, 1.14060439559859689e-22]
B=[]
for i in A:
    c=numpy.format_float_scientific(i, precision=5)
    B.append(c)
print(B)

Вы также можете найти более чистое решение, использующее понимание списка:

B = [numpy.format_float_scientific(i, precision=5) for i in A]

И то и другое даст вам желаемый результат.

0 голосов
/ 29 октября 2018
for i in A:

исправляет ваш код, но затем вы должны переименовать i во что-то более значимое.

Ваш range(len(A)) на самом деле range(6), что эквивалентно (не полностью, в Python 3.x) [0, 1, 2, 3, 4, 5], откуда и выводится ваш код.

Возможно, вы забыли написать A[i] вместо i в качестве первого аргумента format_float_scientific. Но это был бы неэффективный способ перебора вашего списка.

Самый «питонный» способ получить тот же результат - использовать понимание списка, но понимание понимания не всегда легко, и вы можете жить без них некоторое время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...