python

时间:2017-10-24 10:24:41

标签: python arrays numpy

目标

我想使用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功能。

3 个答案:

答案 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. ])