Причина в том, что a
изначально имеет тип np.int64
, тогда как вывод вашего softmax равен np.float
. Вы должны изменить точность массива NumPy a
на np.float
, иначе присвоение в первую строку a
преобразуется с понижением до целочисленной точности:
a = np.array([[1,2,3,4],[5,15,4,7]], dtype=np.float)
Причина, по которой он созданс типом np.int64
изначально, потому что все ваши значения являются целыми числами. Как только вы меняете один из них на плавающий, массив переводится в плавающую точку:
In [9]: a = np.array([[1,2,3,4],[5,15,4,7]])
In [10]: a.dtype
Out[10]: dtype('int64')
In [11]: a = np.array([[1.0,2,3,4],[5,15,4,7]])
In [12]: a.dtype
Out[12]: dtype('float64')
Обратите внимание, что я изменил точность значения 1
на 1.0
. Вы можете сделать это таким образом, если хотите, без явного указания типа. NumPy выясняет, что содержится в конструкции вашего массива, и выводит лучший тип, который соответствует всей предоставленной информации.
Наконец, как только мы выполним все, что получим:
In [14]: a
Out[14]:
array([[ 0.0320586 , 0.08714432, 0.23688282, 0.64391426],
[ 5. , 15. , 4. , 7. ]])