Печать массива numpy как члена списка pythonlist - PullRequest
1 голос
/ 23 сентября 2019

Я экспериментировал с массивами numpy, у меня был очень простой пример:

list = [2, 3]
list.append(np.array([3.2, 9.0, 7.6]))

И если я сделал print(list), он печатает: [2, 3, array([3.2, 9. , 7.6])]

Но если я это сделаюprint(list[-1]), он печатает только [3.2 9. 7.6] Может кто-нибудь объяснить это для меня, что, если я печатаю массив numpy как последний элемент моего списка python, почему он печатает без «массива», скобок и запятых междучисла?Большое спасибо

Ответы [ 3 ]

2 голосов
/ 23 сентября 2019

Объекты в python обычно имеют два разных метода, которые возвращают строковое представление самих себя для print.

Это __str__() и __repr__(), и они имеют различное использование, о котором вы можете прочитать здесь .

Чтобы напечатать что-то, сначала нужно преобразовать это в строку.Обычно print пытается использовать __str__ для этого преобразования.

Выполнение print в списке приводит к вызову list.__str__(), который затем пытается преобразовать все свои внутренние элементы в строку для печати.Вызов, который список использует для преобразования этих элементов, __repr__().

Так что, когда вы print a list, list получает __repr__ каждого элемента, но когда вы печатаете только этоэлемент, print получает __str__ этого элемента.

Вы видите разницу между __repr__ и __str__ в массиве numpy.

x = np.array([1, 2, 3])
x.__str__()
x.__repr__()

Выход:

'[1 2 3]'
'array([1, 2, 3])'
0 голосов
/ 23 сентября 2019

Это потому, что массив numpy при печати выглядит как список.

Но попробуйте это:

>>> import numpy as np

>>> l = [2, 3]
>>> l.append(np.array([3.2, 9.0, 7.6]))
>>> isinstance(l[-1], list)
False
>>> l2 = [3, 2]
>>> isinstance(l2, list)
True

И вы проверите, что массив на самом деле не является списком.

0 голосов
/ 23 сентября 2019

Похоже, это потому, что функция print неявно вызывает __str__ для своих аргументов.

Но если вы встраиваете объект в список, чтобы представить, что в списке, __repr__ будетбыть вызовом для всех элементов в списке:

a = np.linspace(0, 10, 11)
print(a)
# [ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]
print(repr(a))
# array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])

, что вы можете сделать, это привести массив к списку при печати, и array не будет отображаться:

print([a])  # not good
# array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
print([list(a)])  # better
# [[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...