慕妹3146593
您可以将 np.meshgrid 重写为更快的低级 numpy 操作:p = 360; q = 50; r = 50my_array = np.random.rand(p, q, 2)res_array = np.zeros((p,q,r), dtype=np.float32)for i in range(p): x = my_array[None,i,:,0].repeat(q, axis=0).reshape(q, q) y = my_array[None,i,:,0].repeat(q, axis=1).reshape(q, q) res_array[i] = y - x这段代码在我的机器上快了 2 倍。 Numba@njit可用于加速上述代码(再次快 3 倍),但使用它可以实现更高效的实现。这里是:@njit(parallel=True)def fasterImpl(my_array, p, q, r): res_array = np.zeros((p, q, r)) for i in prange(p): for j in range(q): for k in range(r): res_array[i,j,k] = my_array[i,j,0] - my_array[i,k,0] return res_arrayp = 360; q = 50; r = 50my_array = np.random.rand(p, q, 2)res_array = fasterImpl(my_array, p, q, r)这个最终实现比我机器上的原始实现快 29 倍!
临摹微笑
你可以这样做:my_array = np.random.rand(p, q, 2)res_array = np.array([x[1]-x[0] for x in [np.meshgrid(my_array[i,:,0], my_array[i,:,0]) for i in range(p)]], np.float32).reshape(p,q,r)但是比你花的时间多。