【发布时间】:2015-09-07 19:52:10
【问题描述】:
这个问题更侧重于计算的性能。
我有 2 个向量矩阵。这意味着它们对于 X、Y、Z 具有 3 个深度维度。矩阵的每个元素都必须与另一个矩阵的相同位置的元素进行点积。
一个简单而低效的代码将是这个:
import numpy as np
a = np.random.uniform(low=-1.0, high=1.0, size=(1000,1000,3))
b = np.random.uniform(low=-1.0, high=1.0, size=(1000,1000,3))
c = np.zeros((1000,1000))
numRow,numCol,numDepth = np.shape(a)
for idRow in range(numRow):
for idCol in range(numCol):
# Angle in radians
c[idRow,idCol] = math.acos(a[idRow,idCol,0]*b[idRow,idCol,0] + a[idRow,idCol,1]*b[idRow,idCol,1] + a[idRow,idCol,2]*b[idRow,idCol,2])
但是,numpy 函数可以加快计算速度,使代码更快:
# Angle in radians
d = np.arccos(np.multiply(a[:,:,0],b[:,:,0]) + np.multiply(a[:,:,1],b[:,:,1]) + np.multiply(a[:,:,2],b[:,:,2]))
但是,我想知道是否还有其他 sintaxis 可以通过其他功能、索引等来改进上面的这一点...
第一个代码需要 4.658s 而第二个代码需要 0.354s
【问题讨论】:
标签: python performance numpy dot-product