numpy.array_str

numpy.array_str(a, max_line_width=None, precision=None, suppress_small=None)

Функция numpy.array_str() возвращает строковое представление массива.

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

Параметры:
a - массив NumPy или его подкласс.
Экземпляр базового класса ndarray или экземпляр его подкласса. Если указать подобный массиву объект Python, то это приведет к исключению AttributeError.
max_line_width - целое число, (необязательный параметр).
Определяет максимальное количество символов в строке. Причем перенос строки будет происходить только после элемента исходного массива. Проще посмотреть пример, чем понять это определение.
precision - целое положительное число или None, (необязательный параметр).
Задает количество цифр после запятой для чисел с плавающей точкой. По умолчанию None, что соответствует текущей точности (как правило 8 знаков). Используемую по умолчанию точность можно изменить с помощью функции numpy.set_printoptions.
suppress_small - True или False, (необязательный параметр).
Если True и число меньше текущей точности печати то оно будет представлено, как 0. Если False то оно будет выведено в строку "как есть". По умолчанию, точность равна 8 знакам, поэтому числа меньше чем 5e-9, будут представлены как 0.
Возвращает:
str - строка Python
строковое представление исходного массива a.

Примеры

Данная функция возвращает строковое представление массива:

>>>import numpy as np
>>>
>>> a = np.arange(8).reshape(2, 4)
>>> a
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])
>>> 
>>> np.array_str(a)
'[[0 1 2 3]\n [4 5 6 7]]'

Однако, информация о типе массива и типе его данных в строковое представление не включается:

>>> a = np.mat('1.1+2.2j, 3.3-4.4j', dtype = np.complex64)
>>> a
matrix([[1.1+2.2j, 3.3-4.4j]], dtype=complex64)
>>> 
>>> np.array_str(a)
'[[1.1+2.2j 3.3-4.4j]]'

Параметр max_line_width позволяет задать максимальную длину строк между знаками переноса \n (причем, эти самые знаки переноса ставятся только после элементов исходного массива), что в свою очередь может повлиять на количество столбцов в выводе:

>>> a = np.arange(8).reshape(2, 4)
>>> a
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])
>>> 
>>> print(np.array_str(a, max_line_width = 6))
[[0
  1
  2
  3]
 [4
  5
  6
  7]]
>>> 
>>> print(np.array_str(a, max_line_width = 7))
[[0 1
  2 3]
 [4 5
  6 7]]
>>> 
>>> print(np.array_str(a, max_line_width = 9))
[[0 1 2
  3]
 [4 5 6
  7]]

Как видите, перенос строки происходит только после элемента исходного массива, т.е. разбиения числа на части никогда не произойдет.

Параметр precision позволяет задать количество цифр после запятой - точность:

>>> a = np.random.rand(2, 2)
>>> a
array([[0.34554597, 0.77878399],
       [0.90041326, 0.34335704]])
>>> 
>>> np.array_str(a, precision = 4)
'[[0.3455 0.7788]\n [0.9004 0.3434]]'
>>> 
>>> np.array_str(a, precision = 2)
'[[0.35 0.78]\n [0.9  0.34]]'

Если какие-то числа окажутся меньше текущей точности печати, то с помощью параметра suppress_small можно определить их строковое представление True - представлять как ноль, False - представлять "как есть":

>>> a = np.random.rand(2, 2)
>>> a
array([[0.81315842, 0.86014171],
       [0.71377682, 0.95618512]])
>>> 
>>> a[1] = 0.000001
>>> a
array([[8.13158418e-01, 8.60141707e-01],
       [1.00000000e-06, 1.00000000e-06]])
>>> 
>>> print(np.array_str(a, precision = 4, suppress_small = True))
[[0.8132 0.8601]
 [0.     0.    ]]
>>> 
>>> print(np.array_str(a, precision = 4, suppress_small = False))
[[8.1316e-01 8.6014e-01]
 [1.0000e-06 1.0000e-06]]