我需要从代码中消除这个瓶颈。希望有人能帮助我。
我有以下迭代(摘自 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: 对象未对齐
你能给我一些建议吗?非常感谢。
形状是:
- wds:(550800, 8)
- z:(212065,)
- z[ixs]: (550800, 8)
- ix:(550800, 8)
和
- len(zip(距离, ixs)): 550800
- w:(8,)
- ix: (8,)
最佳答案
您可以使用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
关于python - Numpy 2D 点运算、索引和迭代。如何优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24048965/