我需要从代码中删除这个瓶颈。希望有人可以帮助我。
我有以下迭代(从nn反距离插值算法中提取):
jinterpol=0
for w, ix in zip(wds, ixs):
wz = np.vdot(w, z[ix])
result[jinterpol] = wz
jinterpol += 1
我尝试删除for循环:
result = np.dot(wds, z[ixs])
但当然它说ValueError:对象未对齐
你可以给我一些提示吗?非常感谢。形状是:
和
答案 0 :(得分:3)
您可以使用np.einsum
:
>>> import numpy as np
>>> wds = np.random.rand(550800, 8)
>>> z = np.random.rand(212065)
>>> ixs = np.random.randint(212065, size=(550800, 8))
>>> np.einsum('ij,ij->i', wds, z[ixs])
array([ 1.65069924, 3.26203701, 3.16035664, ..., 1.76963986,
2.09727537, 1.94905991])
>>> np.vdot(wds[0], z[ixs[0]])
1.6506992361953157
>>> np.vdot(wds[1], z[ixs[1]])
3.2620370116548827