Python Numpy 2D点操作、索引和迭代。如何优化?
我需要从代码中删除这个瓶颈。希望有人能帮助我 我有以下迭代(从nn反向距离插值算法中提取): 我已尝试删除for循环: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,) 您可以使用: 伟大的这让
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