Откуда берутся лишние пробелы при использовании np.array и np.dot в списках на выходе?
Учусь по книге "Грокаем глубокое обучение" Траск Э.. В одной из первых глав авторами был предложен нижеследующий код. При его исполнении в списках появляются лишние пробелы.
Не могу понять, откуда берутся эти лишние пробелы?
import numpy as np
#веса входные
ih_wgt = np.array([
[0.1, 0.2, -0.1],
[-0.1, 0.1, 0.9],
[0.1, 0.4, 0.1]]).T
#веса скрытого слоя
hp_wgt = np.array([
[0.3, 1.1, -0.3],
[0.1, 0.2, 0.0],
[0.0, 1.3, 0.1]]).T
weights = [ih_wgt, hp_wgt]
def neural_network(input, weights):
hid = input.dot(weights[0])
pred = hid.dot(weights[1])
return pred
toes = np.array([8.5, 9.5, 9.9, 9.0])
wlrec = np.array([0.65, 0.8, 0.8, 0.9])
nfans = np.array([1.2, 1.3, 0.5, 1.0])
number = 0
for i in range(len(toes)):
input = np.array([toes[number], wlrec[number], nfans[number]])
pred = neural_network(input, weights)
print(pred)
number += 1
#На выходе получается:
[0.2135 0.145 0.5065]
[0.204 0.158 0.53 ]
[-0.584 0.018 -0.462]
[-0.015 0.116 0.253]
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
В Python при выводе объекта на печать при помощи функции print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) ко всем выводимым объектам применяется метод obj.__str__(), что и является причиной появления пробелов в вашем случае.
Воспроизведение:
In [91]: toes
Out[91]: array([8.5, 9.5, 9.9, 9. ])
In [92]: str(toes)
Out[92]: '[8.5 9.5 9.9 9. ]'
In [93]: toes.__str__()
Out[93]: '[8.5 9.5 9.9 9. ]'
In [94]: print(toes)
[8.5 9.5 9.9 9. ]
PS данные пробелы появляются только при выводе на печать (или при вызове методов/функций: np_obj.__str__(), str(np_obj), etc.) - исходные данные остаются неизменными