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

13 python numpy

我在一些代码中有一个python ndarray temp,我正在读这个:

x = temp**2
Run Code Online (Sandbox Code Playgroud)

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

temp = num.transpose(whatever)
num.sum(temp**2,axis=1))
Run Code Online (Sandbox Code Playgroud)

把它变成这个:

num.sum(whatever**2,axis=0)
Run Code Online (Sandbox Code Playgroud)

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

tom*_*m10 14

它只是每个元素的平方.

from numpy import *
a = arange(4).reshape((2,2))
print a**2
Run Code Online (Sandbox Code Playgroud)

版画

[[0 1]
 [4 9]]
Run Code Online (Sandbox Code Playgroud)


Ale*_*lli 5

**是 Python 中的升幂运算符,因此在 Python 中x**2表示“x 平方”——包括 numpy。numpy 中的此类操作总是逐个元素地应用,因此x**2对数组的每个元素x(无论维数如何)进行平方,就像x*2将每个元素加倍,或者x+2将每个元素增加 2(在每种情况下,x适当的不受影响——结果是一个与x!)形状相同的新临时数组。

编辑:正如@kaizer.ze 指出的那样,虽然我写的内容适用于numpy.array对象,但它不适用于numpy.matrix对象,其中乘法意味着矩阵乘法而不是逐个元素的操作,例如 for array(以及类似的提升到幂)--确实,这是两种类型之间的主要区别。正如Scipy 教程所说,例如:

当我们使用 numpy.array 或 numpy.matrix 时会有区别。在后一种情况下,A*x 将是矩阵乘积,而不是数组中的元素乘积。

即,正如numpy 参考所说:

矩阵是一种特殊的二维数组,它通过运算保留其二维性质。它有一些特殊的运算符,例如*(矩阵乘法)和**(矩阵幂)。


u0b*_*6ae 5

您应该阅读Matlab用户的NumPy.在那里提到了元素功率操作,你也可以看到,在numpy中,一些运算符对arrayand 应用不同matrix.

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