Numpy:乘以1的向量

时间:2012-07-25 16:25:42

标签: python numpy linear-algebra

我目前正在研究计算机科学教科书中的一些概念。线性代数被大量使用,它们在教科书中展示的例子都使用了Numpy。

特别是一个表达让我完全糊涂了,因为它似乎是一个完全没用的表达。从教科书中逐字复制,它说:

normalisers = sum(exp(outputs),axis=1)*ones((1,shape(outputs)[0]))

所以,为了简化起见,我会删除exp(这与此处的问题无关),这给了我们:

sum(outputs,axis=1)*ones((1,shape(outputs)[0]))

其中outputs是2-D Numpy array(矩阵)。

据我所知,这只是对outputs矩阵中的所有行进行求和,然后将得到的向量元素乘以所有1的向量。所以...这里所有人的成倍是什么意义?它根本不会改变这些值。

这是教科书中的一个错误,还是我只是没有看到所有这些错误会对这里的值产生什么影响呢?我现在对Numpy只有一点熟悉,所以我不确定我是否只是误解了这个表达的一些含义。

1 个答案:

答案 0 :(得分:3)

正如mutzmatron在评论中写道,当outputs是一个数组时,这种乘法是一种非常人为的方法,可以将sum的结果形状从(n,)更改为{{1 }}。快速而惯用的方法是

(1,n)

与教科书中的方式相比,这是可读和可扩展的,因为sum(exp(outputs), axis=1).reshape(1, -1) 需要不变而不是线性时间和内存。

但是,如果reshape不是数组而是可怕类型outputs的对象,则结果完全不同:

np.matrix

(但是,这仍然是表达不同操作的一种人为的方式。)