代码之家  ›  专栏  ›  技术社区  ›  Atefeh Hedayati

如何使用矩阵乘法简化循环?

  •  0
  • Atefeh Hedayati  · 技术社区  · 2 年前

    用2个循环代替2个循环有更有效的方法吗?

    def cost_func(x, y):
         
        for i in range(24):
            for j in range(24):
                cost = np.sum(W[i][j]*(y[j] - x[i]))       
        
        return cost
    

    W是一个矩阵(25,25),x,y是有25个元素的向量。

    2 回复  |  直到 2 年前
        1
  •  1
  •   Z Li    2 年前

    正如@Tim Roberts所指出的,你并不100%确定你在这里想要实现什么,因为你没有节约成本。还有 np.sum 这是令人困惑的假设 x y 是一维向量。但如果它们是一维向量,你可以:

    import numpy as np
    x = np.arange(24)
    y = np.arange(24)
    W = np.random.uniform(0, 1, (24, 24))
    cost = (W * (y.reshape(1, -1) - x.reshape(-1, 1)))
    
    # cost[i][j] = W[i][j]*(y[j] - x[i])
    
        2
  •  1
  •   Tim Roberts    2 年前

    numpy支持矩阵乘法运算符@。我认为你可以通过以下方式得到你想要的:

    C:\tmp>python
    Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import numpy as np
    >>> x = np.arange(3).reshape(1,3)
    >>> y = np.arange(4)
    >>> W = np.ones((3,4))
    >>> (-x)@W@y
    array([-18.])
    >>>