Python命令np.sum(x,axis = 0)和softmax函数

时间:2017-08-22 10:12:25

标签: python numpy

我有以下问题:我想在Python中计算softmax函数并获得意外结果。代码如下:

import numpy as np

def softmax(x):
    """Compute softmax values for each sets of scores in x."""
    return np.exp(x) / np.sum(np.exp(x), axis=0)

它完美地工作但我不知道为什么:它在矩阵上工作如下:如果我插入2x2矩阵A,则输出是另一个2x2矩阵。这是为什么?它不应该返回不同大小的数组,因为矩阵的每个元素,即$ x = A [0,0] $,产生2个输出值(即$ exp(x)/(exp(A [0,0]) + exp(A [1,0]))$和$ exp(x)/(exp(A [0,1])+ exp(A [1,1]))$,因为或者轴= 0命令?这将导致一个8元素的输出数组,但实际结果只有4个元素。另外,axis = 0命令究竟是如何工作的?如果我输入A = np.array([2,4]),那么np.sum(A,axis = 0)的逻辑结果应该是数组([2,4]),因为列是相加的。但结果是数组([6])。和命令np.sum(A ,axis = 1)奇怪地产生“'轴'条目超出界限”,虽然结果应该是数组([6]),因为行总结了。也许我的两个问题是相关的。 任何帮助将不胜感激! 谢谢, 利昂

1 个答案:

答案 0 :(得分:2)

我会跳进"决赛"问题:

matrix_22 / vector_2

因为这没有数学意义,numpy使用某种假设。就像:

matrix_22 * 5

它的作用是将矩阵的每个元素乘以5.然后,如果我们将matrix_22视为向量的向量,那么matrix_22 / vector_2的结果会导致为每个元素应用运算除法矩阵上的向量。

您可以轻松检查执行以下操作的行为:

np.array([[14, 28], [70, 56]]) / np.array([2, 7])

符号:matrix_22是"某个变量包含一个形状为2x2的numpy数组,所以它是一个2x2矩阵"。 vector_2是一个由两个元素组成的numpy数组。