代码之家  ›  专栏  ›  技术社区  ›  culebrón

如何在numpy/scipy中按行计算矩阵?

  •  1
  • culebrón  · 技术社区  · 6 年前

    我有ai/bi/ci、ad、bd、cd元素,需要计算aj/bj/cj:

     ai   bi   ci |  ad   bd   cd |  aj   bj   cj 
    --------------+---------------+--------------
    1.1  1.2  1.3 | 0.1  0.6  0.3 | 1.1  2.4  1.3
                         ^^^             ^^^   
    1.5  1.6  1.7 | 0.6  0.7  0.8 | 1.5  1.6  3.1
                              ^^^             ^^^
    

    逻辑是这样的:

    aj = ai if ad < max(ad, bd, cd) else bi + ci
    

    如果 ai 马克斯在吗 *i 然后 aj = bi + ci . 这同样适用于 bj cj ,它们将替换为其他两个元素的总和。

    我可以用pandas编写一个三元运算符,但希望有一种方法可以用numpy来表达。

    1 回复  |  直到 6 年前
        1
  •  2
  •   jpp    6 年前

    使用 np.where array slicing

    A = np.array([[1.1, 1.2, 1.3, 0.1, 0.6, 0.3],
                  [1.5, 1.6, 1.7, 0.6, 0.7, 0.8]])
    
    n = A.shape[1] // 2
    
    res = np.where(A[:, n:] < A[:, n:].max(1)[:, None],
                   A[:, :n],
                   A[:, :n].sum(1)[:, None] - A[:, :n])
    
    print(res)
    
    array([[1.1, 2.4, 1.3],
           [1.5, 1.6, 3.1]])