python 笛卡尔积 两个表_python

假设我有一个二维图像,每个点都有相关联的坐标(x,y)。 我想在每个点$ i $和每个其他点$ j $处找到位置向量的内积。 本质上,是两个2d数组的笛卡尔积。

在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

(应归功于贷方:cartesian_product来自使用numpy来构建两个数组的所有组合的数组 )

但这是行不通的。 对于较大的阵列(例如256x256),这会给我带来内存错误。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值