我正在阅读的一些代码中有一个python ndarray temp,它遇到了以下问题:
x = temp**2
这是点的平方(即,相当于m.*m)或矩阵平方(即m必须是一个方阵)?特别是,我想知道我是否可以摆脱转置在这个代码:
temp = num.transpose(whatever)
num.sum(temp**2,axis=1))
把它变成这样:
num.sum(whatever**2,axis=0)
这将为我节省至少0. 1毫秒,显然值得我花时间。
谢谢!**运算符无法在谷歌上搜索,我什么都不知道!a
3条答案
按热度按时间ymdaylpp1#
它只是每个元素的平方。
印刷品
vfhzx4xs2#
你应该读NumPy for Matlab Users,这里提到了元素态的幂运算,你也可以看到在numpy中,一些运算符对
array
和matrix
的应用是不同的。lnvxswe23#
**
是Python中的乘幂运算符,因此x**2
在Python中表示“x平方”--包括numpy。(无论维数如何)就像x*2
将每个元素加倍,或者x+2
将每个元素增加2(在每种情况下,x
本身不受影响--结果是一个与x
形状相同的新临时数组!)。编辑:正如@kaizer.ze指出的,虽然我写的内容适用于
numpy.array
对象,但它不适用于numpy.matrix
对象,在numpy.matrix
对象中,乘法意味着矩阵乘法,而不是像array
那样的逐个元素的运算(乘方也是如此)--事实上,这是两种类型之间的关键区别。例如,正如Scipy tutorial所言:当我们使用numpy.array或numpy.matrix时,这是有区别的。在后一种情况下,A*x将是矩阵积,而不是像数组那样的元素积。
也就是numpy reference所说的:
矩阵是一种特殊的二维数组,通过运算保持其二维性质。它有一些特殊的运算符,如
*
(矩阵乘法)和**
(矩阵幂)。