我在某些代码中有一个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,显然值得我的时间 谢谢! **运算符是不可编辑的,我什么都不知道! 一个
答案 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中,一些运算符对array
和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]]
答案 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
(矩阵 乘法)和*
(矩阵幂)。