Python Numpy 2D点操作、索引和迭代。如何优化?

Python Numpy 2D点操作、索引和迭代。如何优化?,python,optimization,numpy,Python,Optimization,Numpy,我需要从代码中删除这个瓶颈。希望有人能帮助我 我有以下迭代(从nn反向距离插值算法中提取): 我已尝试删除for循环: result = np.dot(wds, z[ixs]) 当然,上面说的是ValueError:对象没有对齐 你能给我一些提示吗?非常感谢 形状包括: wds:(550800,8) z:(212065,) z[ixs]:(550800,8) ixs:(550800,8) 及 长度(拉链(距离,ixs)):550800 w:(8,) 九:(8,) 您可以使用: 伟大的这让

我需要从代码中删除这个瓶颈。希望有人能帮助我

我有以下迭代(从nn反向距离插值算法中提取):

我已尝试删除for循环:

result = np.dot(wds, z[ixs])
当然,上面说的是ValueError:对象没有对齐

你能给我一些提示吗?非常感谢

形状包括:

  • wds:(550800,8)
  • z:(212065,)
  • z[ixs]:(550800,8)
  • ixs:(550800,8)

  • 长度(拉链(距离,ixs)):550800
  • w:(8,)
  • 九:(8,)
您可以使用:


伟大的这让我很开心。非常感谢。我将研究np.einsum,但目前它只是起作用。在我的系统上,它给出了一个内存错误:你正在计算一个巨大的数组,并且扔掉了除对角线以外的所有东西,如果它在任何方面都有优势,我会感到惊讶。是的,我以前也尝试过np.dot(wds,z[ixs].T)在这里询问,它给了我一个内存错误。
result = np.dot(wds, z[ixs])
>>> 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