numpy.dot、numpy.trace函数用法

这篇文章帮助学习者了解下numpy的两个函数,dot和trace

numpy.dot  

这个函数实现的是矩阵乘法

官方文档如下:

    numpy.dot(a, b, out=None)
        Dot product of two arrays. Specifically,
    
    If both a and b are 1-D arrays, it is inner product of vectors (without complex conjugation)
    If both a and b are 2-D arrays, it is matrix multiplication, but using matmul or a @ b is preferred.
    
    If either a or b is 0-D (scalar), it is equivalent to multiply and using numpy.multiply(a, b) or a * b is preferred.
    
    If a is an N-D array and b is a 1-D array, it is a sum product over the last axis of a and b.
    
    If a is an N-D array and b is an M-D array (where M>=2), it is a sum product over the last axis of a and the second-to-last axis of b:

 如果a和b都是一维数组,那么它是向量的内积。  

 如果a和b都是二维数组,则它是矩阵乘法,但最好使用矩阵或a@b。  

 如果a或b是0-d(标量),则它等于乘法,并且优选使用numpy.multiply(a、b)或a*b。  

 如果a是n-d数组,b是一维数组,那么它是a和b的最后一个轴上的和积。  

 如果a是n-d数组,而b是m-d数组(其中为m>=2),则它是a的最后一个轴和b的第二到最后一个轴上的和积

下面给出一些简单的例子

在a和b都是二维数组的情况下,将a,b设置为形状为(3,3)和(3,4)的随机数矩阵,并给出他们的乘法运算

import numpy as np
a = np.random.random((3,3))
b = np.random.random((3,4))

a,b
(array([[0.69680474, 0.59586631, 0.95972126],
        [0.73228572, 0.66192343, 0.90553587],
        [0.31675047, 0.08604421, 0.21743264]]),
 array([[0.88048267, 0.80778826, 0.29459481, 0.83663852],
        [0.91770254, 0.53513741, 0.19388619, 0.00294862],
        [0.80654194, 0.02093392, 0.01940262, 0.8697376 ]]))

np.dot(a,b)
array([[1.93440797, 0.90183176, 0.33942641, 1.41943634],
       [1.98256636, 0.96470821, 0.36163515, 1.40218881],
       [0.53322484, 0.30646451, 0.11421459, 0.4543687 ]])

a @ b
array([[1.93440797, 0.90183176, 0.33942641, 1.41943634],
       [1.98256636, 0.96470821, 0.36163515, 1.40218881],
       [0.53322484, 0.30646451, 0.11421459, 0.4543687 ]])

 

numpy.trace

这个函数实现的是迹运算

官方文档如下:

      numpy.trace(a, offset=0, axis1=0, axis2=1, dtype=None, out=None)

   Return the sum along diagonals of the array.

    If a is 2-D, the sum along its diagonal with the given offset is returned, i.e., the sum of elements a[i,i+offset] for all i.

如果a是二维数组,那么对角线和将会依据所给的offset参数返回。

 

If a has more than two dimensions, then the axes specified by axis1 and axis2 are used to determine the 2-D sub-arrays whose traces are returned. The shape of the resulting array is the same as that of a with axis1 and axis2 removed.

如果a具有超过两个维度,则由轴1和轴2指定的轴用于确定返回迹的二维子数组。结果阵列的形状与去除轴1和轴2的形状相同。 

示例代码如下,下面的代码展示了四维矩阵a的形状,以及在相关参数下的迹运算的形状以及值

import numpy as np
a = np.arange(3*4*5*6).reshape((3,4,5,6))

a.shape
(3, 4, 5, 6)

a.trace(axis1=2,axis2=1).shape
(3, 6)

a.trace(axis1=2,axis2=1)
array([[ 216,  220,  224,  228,  232,  236],
       [ 696,  700,  704,  708,  712,  716],
       [1176, 1180, 1184, 1188, 1192, 1196]])

a.trace()
array([[450, 453, 456, 459, 462, 465],
       [468, 471, 474, 477, 480, 483],
       [486, 489, 492, 495, 498, 501],
       [504, 507, 510, 513, 516, 519],
       [522, 525, 528, 531, 534, 537]])

 

你可能感兴趣的:(numpy,python)