python笛卡尔积 优化_python中,求一个超大list的笛卡尔积,内存会很快溢出。有没有办法将生成的结果写入一个文本文件?...

def cartesian_jit(arrays):

"""

Generate a cartesian product of input arrays.

Parameters

----------

arrays : list or tuple of arrays

1-D arrays to form the cartesian product of.

Returns

-------

out : ndarray

2-D array of shape (M, len(arrays)) containing cartesian products

formed of input arrays.

Examples

--------

>>> cartesian(([1, 2, 3], [4, 5], [6, 7]))

array([[1, 4, 6],

[1, 4, 7],

[1, 5, 6],

[1, 5, 7],

[2, 4, 6],

[2, 4, 7],

[2, 5, 6],

[2, 5, 7],

[3, 4, 6],

[3, 4, 7],

[3, 5, 6],

[3, 5, 7]])

"""

n = 1

for x in arrays:

n *= x.size

out = np.zeros((n, len(arrays)))

for i in range(len(arrays)):

m = int(n / arrays[i].size)

out[:n, i] = np.repeat(arrays[i], m)

n //= arrays[i].size

n = arrays[-1].size

for k in range(len(arrays)-2, -1, -1):

n *= arrays[k].size

m = int(n / arrays[k].size)

for j in range(1, arrays[k].size):

out[j*m:(j+1)*m,k+1:] = out[0:m,k+1:]

return out

试试Numpy, 请参考https://gist.github.com/hernamesbarbara/68d073f551565de02ac5​gist.github.com

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值