用两个数字将数组相乘

时间:2019-05-23 15:27:27

标签: python python-3.x numpy

我想使这个具有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做到这一点?

4 个答案:

答案 0 :(得分:5)

只需将数据转换为数组,然后简单地乘积*。这里的技巧是为要与之相乘的两个值创建一维向量。 *然后执行逐元素乘法

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)

答案 1 :(得分: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回答的那样,使用*运算符也可以,并且可以完成相同的工作。

答案 2 :(得分:1)

由于您说的是python或numpy,所以只需提供一个非numpy解决方案,您也可以通过一个简单的for循环轻松地做到这一点。

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

答案 3 :(得分:0)

没有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 ]