python实现二维数组的笛卡尔积_两个二维阵列的笛卡尔积

假设每个点都有坐标。

我想找出位置向量在每一点$I$与每隔一点$j$的内积。本质上是两个二维数组的笛卡尔积。在

在Python中,实现这一点的最快方法是什么?在

我当前的实现如下所示:def cartesian_product(arrays):

broadcastable = np.ix_(*arrays)

broadcasted = np.broadcast_arrays(*broadcastable)

rows, cols = reduce(np.multiply, broadcasted[0].shape), len(broadcasted)

out = np.empty(rows * cols, dtype=broadcasted[0].dtype)

start, end = 0, rows

for a in broadcasted:

out[start:end] = a.reshape(-1)

start, end = end, end + rows

return out.reshape(cols, rows).T

def inner_product():

x, y = np.meshgrid(np.arange(4),np.arange(4))

cart_x = cartesian_product([x.flatten(),x.flatten()])

cart_y = cartesian_product([y.flatten(),y.flatten()])

Nx = x.shape[0]

xx = (cart_x[:,0]*cart_x[:,1]).reshape((Nx**2,Nx,Nx))

yy = (cart_y[:,0]*cart_y[:,1]).reshape((Nx**2,Nx,Nx))

inner_products = xx+yy

return inner_products

但这行不通。对于较大的数组(比如256x256),这会给我一个内存错误。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值