itertools产品加速

itertools产品加速,第1张

itertools产品加速

该NumPy的等效的

itertools.product()
numpy.indices()
,但它只会让你的形式0的范围内的产品,…,K-1:

numpy.rollaxis(numpy.indices((2, 3, 3)), 0, 4)array([[[[0, 0, 0],         [0, 0, 1],         [0, 0, 2]],        [[0, 1, 0],         [0, 1, 1],         [0, 1, 2]],        [[0, 2, 0],         [0, 2, 1],         [0, 2, 2]]],       [[[1, 0, 0],         [1, 0, 1],         [1, 0, 2]],        [[1, 1, 0],         [1, 1, 1],         [1, 1, 2]],        [[1, 2, 0],         [1, 2, 1],         [1, 2, 2]]]])

对于特殊情况,您可以使用

a = numpy.indices((4,)*13)b = 1j ** numpy.rollaxis(a, 0, 14)

(由于阵列太大,因此无法在32位系统上运行。从我可以测试的大小推断,它应该在不到一分钟的时间内运行。)

EIDT:只需提一下:对的调用

numpy.rollaxis()
或多或少是装饰性的,以获得与相同的输出
itertools.product()
。如果您不关心索引的顺序,则可以忽略它(但是只要您没有任何后续 *** 作都可以将数组转换为连续数组,它还是很便宜的。)

编辑2:要获得确切的类似物

numpy.array(list(itertools.product(some_list, repeat=some_length)))

您可以使用

numpy.array(some_list)[numpy.rollaxis(    numpy.indices((len(some_list),) * some_length), 0, some_length + 1)    .reshape(-1, some_length)]

这变得完全不可读-告诉我是否应该进一步解释它了:)



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5663575.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存