これは Numpy に多少関連しています: x および y 配列ポイントの 2D ポイントの単一配列へのデカルト積
任意の次元を持つ 2 つの配列のデカルト積を作成する簡潔な方法を探しています。
例:
関連スレッドと同様に、
x = numpy.array([1,2,3]) #ndim 1
y = numpy.array([4,5]) #ndim 1
cartesian_product(x,y) == numpy.array([[[1, 4],
[2, 4],
[3, 4]],
[[1, 5],
[2, 5],
[3, 5]]]) #ndim "2" = ndim x + ndim y
[1, 4]、[2, 4] などは座標であり、実際の次元ではないため、結果の配列は 2 次元です。一般化するには、x/y を [[1], [2], [3]] と書くほうがよいかもしれません。
上記は等しい
numpy.dstack(numpy.meshgrid(x,y))
でも私も欲しい
x2 = numpy.array([[1,1], [2,2], [3,3]]) #ndim "1", since [1, 1] is a coordinate
cartesian_product(x2,y) == numpy.array([[[1, 1, 4],
[2, 2, 4],
[3, 3, 4]],
[[1, 1, 5],
[2, 2, 5],
[3, 3, 5]]]) #ndim 2 = ndim x2 + ndim y
y2 = numpy.array([[10, 11], [20, 21]]) #ndim 1
(cartesian_product(x2, y2) ==
numpy.array([[[1, 1, 10, 11],
[2, 2, 10, 11],
[3, 3, 10, 11]],
[[1, 1, 20, 21],
[2, 2, 20, 21],
[3, 3, 20, 21]]])) #ndim x2 + ndim y2
x3 = numpy.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) #ndim 2
(cartesian_product(x3, y) ==
numpy.array([[[[1, 2, 4], [3, 4, 4]], [[5, 6, 4], [7, 8, 4]]],
[[[1, 2, 5], [3, 4, 5]], [[5, 6, 5], [7, 8, 5]]]]) #ndim 3
私がやろうとしていることを視覚化するには:私が言ったように、 [[0, 0], [0, 1], [1, 1], [1, 0]] は座標の1次元リストとして解釈されるべきです、これは線に対応します。[1, 2, 3, 4] でデカルト積を計算すると、この線が z 方向に押し出され、サーフェス (つまり 2 次元) になります。しかし、配列はもちろん 3 次元になります。
これをループで解決できると思いますが、numpy/scipy ツールでこれを達成する方法はありますか?