に相当する NumPy はitertools.product()
is ですが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 ビット システムでは実行されません。テストできるサイズから推定すると、1 分以内に実行されるはずです。)
EIDT: 言及しておくと、 の呼び出しnumpy.rollaxis()
は、 と同じ出力を得るために、多かれ少なかれ表面的なものitertools.product()
です。インデックスの順序を気にしない場合は、単に省略できます (ただし、配列を連続した配列に変換するフォローアップ操作がない限り、とにかく安価です)。
EDIT2:の正確な類似物を取得するには
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)]
これは完全に読めなくなりました -- これ以上説明する必要があるかどうか教えてください :)