numpy.array_str
numpy.array_str(a, max_line_width=None, precision=None, suppress_small=None)
Функция 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]]