我想使这个具有1080和1920的数组的数组变薄。
[[0.4375, 0.3477366255144033], [0.3599537037037037, 0.676954732510288], [0.5648148148148148, 0.720164609053498], [0.8483796296296297, 0.44238683127572015], [0.8726851851851852, 0.3374485596707819]]
所以0.4375 * 1080
和0.3477 * 1920
我想对每个元素执行此操作。
如何使用Python或numpy做到这一点?
答案 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 ]