我是Python的新手,我想了解一个语法问题。 我有一个numpy矩阵:
x = np.array([[1, 2, 3, 6],
[2, 4, 5, 6],
[3, 8, 7, 6]])
我想对每个列应用一个 Softmax 函数。 该代码非常简单。在不报告整个循环的情况下,假设我在第一列中做到了:
w = x[:,0] # select a column
w = np.exp(w) # compute softmax in two steps
w = w/sum(w)
x[:,0] = w # reassign the values to the original matrix
但是,不是将w: array([0.09003057, 0.24472847, 0.66524096])
的值分配给矩阵,而是仅将零列分配给该矩阵,并返回:
np.array([[0, 2, 3, 6],
[0, 4, 5, 6],
[0, 8, 7, 6]])
那是为什么?我该如何解决这个问题? 谢谢
答案 0 :(得分:1)
矩阵的值的类型为int
,在分配时,softmax值将转换为int
,因此为零。
像这样创建矩阵:
x = np.array([[1, 2, 3, 6],
[2, 4, 5, 6],
[3, 8, 7, 6]]).astype(float)
现在,在分配softmax值之后:
w = x[:,0] # select a column
w = np.exp(w) # compute softmax in two steps
w = w/sum(w)
x[:,0] = w # reassign the values to the original matrix
x
出来是:
array([[0.09003057, 2., 3., 6.],
[0.24472847, 4., 5., 6.],
[0.66524096, 8., 7., 6.]])