首页 > 解决方案 > Python,Numpy:无法将 numpy 数组的值分配给矩阵的列

问题描述

我是 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]])

这是为什么?我该如何纠正这个问题?谢谢

标签: pythonarraysnumpy

解决方案


矩阵的值的类型是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.]])

推荐阅读