我想使用map
函数计算汇总。
使用以下示例数据:
X = [[2,3,4,5,6],[1,4,5,3,5]]
Y = [8.5,9.6]
这就是我现在所得到的:
import numpy as np
X = np.array([[2,3,4,5,6],[1,4,5,3,5]])
Y = np.array([8.5,9.6])
summation = X[0].dot(Y[0]) + X[1].dot(Y[1])
或
summation = np.sum(X.T * Y, axis=-1)
t0 = time.time()
print sum(map(lambda x: x*Y[np.where(X==x)[0][0]], X))
t1= time.time()-t0
print t1
0.000971078872681
t0 = time.time()
print X[0].dot(Y[0]) + X[1].dot(Y[1])
t1= time.time()-t0
print t1
0.000860929489136
t0 = time.time()
print X.T.dot(Y)
t1= time.time()-t0
print t1
0.000858068466187
t0 = time.time()
print np.sum(X.T * Y, axis=-1)
t1= time.time()-t0
print t1
0.000848054885864
t0 = time.time()
print summation(X,Y)
t1= time.time()-t0
print t1
0.00386810302734
最快的解决方案是summation with map function
,后跟np.sum
,最慢的是map
功能。
答案 0 :(得分:3)
你也试过这个,虽然这不是最干净的"这样做的方式:
X = np.array([[2,3,4,5,6],[1,4,5,3,5]])
Y = np.array([8.5,9.6])
def summation(X, Y):
return sum(map(lambda x, y: x*y, X, Y))
print(summation(X,Y))
结果是:
[ 26.6 63.9 82. 71.3 99. ]
答案 1 :(得分:2)
单个dot
电话就足够了。
X.T.dot(Y)
array([ 26.6, 63.9, 82. , 71.3, 99. ])
这给出了与所描述的其他两种方法相同的结果。我打赌这比你梦寐以求的任何map
解决方案都快(尽管在这里使用没有任何意义)。
答案 2 :(得分:2)
不确定这是否优雅,但它使用地图功能
sum(map(lambda x: x*Y[np.where(X==x)[0][0]], X))
array([ 26.6, 63.9, 82. , 71.3, 99. ])