Как к структурной распечатке программы numpy.array без экспоненциального представления и с данной точностью?

Мне любопытно, существует ли какой-либо способ распечатать отформатированный numpy.arrays, например, в некотором роде подобный этому:

x = 1.23456
print '%.3f' % x

Если я хочу распечатать numpy.array из плаваний это печатает несколько десятичных чисел, часто в 'научном' формате, который довольно трудно считать даже для низко-размерных массивов. Однако numpy.array по-видимому, должен быть распечатан как строка, т.е. с %s. Существует ли решение для этого?

295
задан HAL 9001 19 February 2019 в 11:02
поделиться

1 ответ

Вы можете использовать set_printoptions , чтобы установить точность вывода:

import numpy as np
x=np.random.random(10)
print(x)
# [ 0.07837821  0.48002108  0.41274116  0.82993414  0.77610352  0.1023732
#   0.51303098  0.4617183   0.33487207  0.71162095]

np.set_printoptions(precision=3)
print(x)
# [ 0.078  0.48   0.413  0.83   0.776  0.102  0.513  0.462  0.335  0.712]

И подавить подавляет использование экспоненциальной нотации для малых чисел:

y=np.array([1.5e-10,1.5,1500])
print(y)
# [  1.500e-10   1.500e+00   1.500e+03]
np.set_printoptions(suppress=True)
print(y)
# [    0.      1.5  1500. ]

См. документацию для set_printoptions , чтобы узнать о других параметрах.


Чтобы применить параметры печати локально , используя NumPy 1.15.0 или новее, вы можете использовать диспетчер контекста numpy.printoptions . Например, внутри with-suite precision = 3 установлены и suppress = True :

x = np.random.random(10)
with np.printoptions(precision=3, suppress=True):
    print(x)
    # [ 0.073  0.461  0.689  0.754  0.624  0.901  0.049  0.582  0.557  0.348]

Но за пределами with-suite печать параметры возвращаются к настройкам по умолчанию:

print(x)    
# [ 0.07334334  0.46132615  0.68935231  0.75379645  0.62424021  0.90115836
#   0.04879837  0.58207504  0.55694118  0.34768638]

Если вы используете более раннюю версию NumPy, вы можете создать диспетчер контекста сам. Например,

import numpy as np
import contextlib

@contextlib.contextmanager
def printoptions(*args, **kwargs):
    original = np.get_printoptions()
    np.set_printoptions(*args, **kwargs)
    try:
        yield
    finally: 
        np.set_printoptions(**original)

x = np.random.random(10)
with printoptions(precision=3, suppress=True):
    print(x)
    # [ 0.073  0.461  0.689  0.754  0.624  0.901  0.049  0.582  0.557  0.348]

Чтобы предотвратить удаление нулей из конца числа с плавающей запятой:

np.set_printoptions теперь имеет параметр formatter , который позволяет вам указать функцию форматирования для каждого типа.

np.set_printoptions(formatter={'float': '{: 0.3f}'.format})
print(x)

, который печатает

[ 0.078  0.480  0.413  0.830  0.776  0.102  0.513  0.462  0.335  0.712]

вместо

[ 0.078  0.48   0.413  0.83   0.776  0.102  0.513  0.462  0.335  0.712]
497
ответ дан 23 November 2019 в 01:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: