【问题标题】:Multiply arrays in array with two numbers将数组中的数组与两个数字相乘
【发布时间】:2019-10-10 05:21:56
【问题描述】:

我想将这个数组与 1080 和 1920 相乘。

[[0.4375, 0.3477366255144033], [0.3599537037037037, 0.676954732510288], [0.5648148148148148, 0.720164609053498], [0.8483796296296297, 0.44238683127572015], [0.8726851851851852, 0.3374485596707819]]

所以0.4375 * 10800.3477 * 1920

我想对每个元素都这样做。

如何使用 Python 或 numpy 做到这一点?

【问题讨论】:

    标签: python python-3.x numpy


    【解决方案1】:

    只需将您的数据转换为数组,然后只需获取产品*。这里的技巧是创建一个你想要相乘的两个值的一维向量。 * 然后执行元素乘法

    import numpy as np
    
    mult = np.array([1080, 1920])
    inp = np.array([[0.4375, 0.3477366255144033], [0.3599537037037037, 0.676954732510288], 
                    [0.5648148148148148, 0.720164609053498], [0.8483796296296297, 0.44238683127572015], 
                    [0.8726851851851852, 0.3374485596707819]])
    
    result = inp*mult
    # array([[ 472.5       ,  667.65432099],
    #        [ 388.75      , 1299.75308642],
    #        [ 610.        , 1382.71604938],
    #        [ 916.25      ,  849.38271605],
    #        [ 942.5       ,  647.90123457]])
    

    EDIT:: 时间比较 两种方法的工作方式相似

    %timeit inp*mult
    # 2.89 µs ± 365 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
    
    %timeit np.multiply(inp, mult)
    # 2.55 µs ± 322 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
    

    【讨论】:

      【解决方案2】:

      您想要执行数组的元素乘法。所以使用numpy.multiply()方法。

      >>> x1 = np.array([[0.4375, 0.3477366255144033], [0.3599537037037037, 0.676954732510288], [0.5648148148148148, 0.720164609053498], [0.8483796296296297, 0.44238683127572015], [0.8726851851851852, 0.3374485596707819]])
      >>>
      >>> x1
      array([[0.4375    , 0.34773663],
             [0.3599537 , 0.67695473],
             [0.56481481, 0.72016461],
             [0.84837963, 0.44238683],
             [0.87268519, 0.33744856]])
      >>> x2 = np.array([1080, 1920])
      >>> x2
      array([1080, 1920])
      >>> prod = np.multiply(x1, x2)
      >>> prod
      array([[ 472.5       ,  667.65432099],
             [ 388.75      , 1299.75308642],
             [ 610.        , 1382.71604938],
             [ 916.25      ,  849.38271605],
             [ 942.5       ,  647.90123457]])
      

      编辑:正如上面@Sheldore 所回答的那样,使用* 运算符也很好,并且可以完成同样的工作。

      【讨论】:

        【解决方案3】:

        只是为了提供一个非numpy 解决方案作为选项,因为您说python 或numpy,您也可以使用简单的for 循环轻松地做到这一点。

        # myList is your list
        for index in range(len(myList)):
            myList[index][0] *= 1080
            myList[index][1] *= 1920
        print(myList)
        

        【讨论】:

          【解决方案4】:

          没有 numpy,你可以使用列表推导:

          result = [ [a*1080,b*1920] for a,b in arrays ]
          

          要处理任意数量的乘数,您可以使用 zip

          multipliers = [1080,1920]
          result = [ [a*m for a,m in zip(row,multipliers)] for row in arrays ]
          

          【讨论】:

            猜你喜欢
            • 2010-12-24
            • 1970-01-01
            • 2020-05-26
            • 2013-12-19
            • 1970-01-01
            • 2013-09-21
            • 2017-09-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多