【问题标题】:How to make a matrix of arrays in numpy?如何在numpy中制作数组矩阵?
【发布时间】:2013-03-09 03:34:53
【问题描述】:

我想做一个 2x2 矩阵

T = [[A, B],
     [C, D]]

每个元素A,B,C,D 是一个数组(当然大小相同)。这可能吗?

我希望能够将这些矩阵相乘,例如将两个矩阵相乘T1T2 应该给我

T1*T2 = [[A1*A2, B1*B2],
         [C1*C2, D1*D2]]

它仍然是相同大小的数组矩阵。有这样的乘法函数吗?

而且,如果我将 T 与普通标量矩阵 t = [[a,b],[c,d]] 相乘,其中 a,b,c,d 是标量数,则乘法应该给我

t*T = [[a*A, b*B],
       [c*C, d*D]]

我该怎么做?一个示例或相关材料的链接会很棒。

【问题讨论】:

    标签: python arrays matrix numpy


    【解决方案1】:

    您的第一个问题不是如您所愿吗?

    In [1]: import numpy as np
    
    In [2]: arr = np.arange(8).reshape(2, 2, 2)
    
    In [3]: arr
    Out[3]: 
    array([[[0, 1],
            [2, 3]],
    
           [[4, 5],
            [6, 7]]])
    
    In [4]: arr*arr
    Out[4]: 
    array([[[ 0,  1],
            [ 4,  9]],
    
           [[16, 25],
            [36, 49]]])
    

    至于您的第二个问题,只需将其重塑为 3 维数组即可:

    In [5]: arr2 = np.arange(4).reshape(2, 2)
    
    In [6]: arr2
    Out[6]: 
    array([[0, 1],
           [2, 3]])
    
    In [7]: arr2 = arr2.reshape(2, 2, 1)
    
    In [8]: arr2
    Out[8]: 
    array([[[0],
            [1]],
    
           [[2],
            [3]]])
    
    In [9]: arr*arr2
    Out[9]: 
    array([[[ 0,  0],
            [ 2,  3]],
    
           [[ 8, 10],
            [18, 21]]])
    

    【讨论】:

    • 谢谢!这太棒了。我认为我对第一部分的错误是我应该使用array 函数来构造矩阵,而不是matrix 函数。第二部分完美运行,正是我想要的。
    【解决方案2】:
    >>> from numpy import array, matrix, multiply
    >>> A = array([1, 2, 3])
    >>> 
    >>> B = array([2, 3, 4])
    >>> 
    >>> C = array([4, 5, 6])
    >>> 
    >>> D = array([7, 8, 9])
    >>> 
    >>> T1 = matrix([A, B, C, D])
    >>> T1
    matrix([[1, 2, 3],
            [2, 3, 4],
            [4, 5, 6],
            [7, 8, 9]])
    >>> T2 = T1 * 100
    >>> T2
    matrix([[100, 200, 300],
            [200, 300, 400],
            [400, 500, 600],
            [700, 800, 900]])
    >>> 
    >>> multiply(T1, T2)
    matrix([[ 100,  400,  900],
            [ 400,  900, 1600],
            [1600, 2500, 3600],
            [4900, 6400, 8100]])
    >>> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-23
      • 2016-10-24
      • 1970-01-01
      • 2013-11-26
      • 2011-03-21
      • 1970-01-01
      相关资源
      最近更新 更多