矩阵** 2在python / numpy中意味着什么?

时间:2009-08-29 01:40:52

标签: python numpy

我在某些代码中有一个python ndarray temp,我正在读这个:#/ p>

x = temp**2

这是点平方(即相当于m。* m)还是矩阵平方(即m必须是方阵)?特别是,我想知道我是否可以在这段代码中摆脱转置:

temp = num.transpose(whatever)
num.sum(temp**2,axis=1))

并将其转换为:

num.sum(whatever**2,axis=0)

这将节省我至少0.1ms,显然值得我的时间 谢谢! **运算符是不可编辑的,我什么都不知道! 一个

3 个答案:

答案 0 :(得分:14)

这只是每个元素的平方。

from numpy import *
a = arange(4).reshape((2,2))
print a**2

打印

[[0 1]
 [4 9]]

答案 1 :(得分:5)

您应该阅读NumPy for Matlab Users。这里提到了元素幂功能,你也可以看到,在numpy中,一些运算符对arraymatrix采用不同的方式。

>>> from numpy import *
>>> a = arange(4).reshape((2,2))
>>> print a**2
[[0 1]
 [4 9]]
>>> print matrix(a)**2
[[ 2  3]
 [ 6 11]]

答案 2 :(得分:4)

**是Python中的提升功能运算符,因此x**2在Python中意味着“x平方” - 包括numpy。 numpy中的此类操作始终逐个元素应用,因此x**2对数组x的每个元素(无论维数的数量)进行平方,就像说x*2会使每个元素加倍,或{{ 1}}将每个元素递增2(在每种情况下,x+2本身不受影响 - 结果是一个与x形状相同的新临时数组!)。

编辑:正如@ kaizer.ze指出的那样,虽然我写的内容适用于x个对象,但它不适用于numpy.array个对象,其中乘法意味着矩阵乘法而不是像numpy.matrix那样逐个元素操作(并且类似地提升到权力) - 实际上,这是两种类型之间的关键区别。正如Scipy tutorial所说,例如:

  

当我们使用numpy.array或   numpy.matrix有区别。   A * x将在后一种情况矩阵中   产品,而不是元素产品   与数组。

即,正如numpy reference所说的那样:

  

矩阵是一个专门的二维数组   通过保留其二维性质   操作。它有一定的特殊性   运算符,例如array(矩阵   乘法)和*(矩阵幂)。