笛卡尔积的符号化为:
A×B={(x,y)|x∈A∧y∈B}
例如,A={a,b}, B={0,1,2},则
A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}
Numpy:x和y数组点的笛卡儿乘积成二维点的单个数组
两个numpy数组,它们定义了网格的x和y轴。例如:
x = numpy.array([1,2,3])y = numpy.array([4,5])
生成这些数组的笛卡儿积
array([[1,4],[2,4],[3,4],[1,5],[2,5],[3,5]])
在某种程度上,这并不是非常低效率,因为我需要在一个循环中多次这样做。我假设将它们转换为Python列表并使用itertools.product返回到numpy数组并不是最有效的形式。
>>> numpy.transpose([numpy.tile(x, len(y)), numpy.repeat(y, len(x))])array([[1, 4],
[2, 4],
[3, 4],
[1, 5],
[2, 5],
[3, 5]])
N=4
I=range(1,N)
J=range(1,N)
print(np.kron(I,J))
x=np.arange(1,N)
y=np.arange(1,N)
V1=np.transpose([np.repeat(y, len(x)),np.tile(x, len(y))])
#%%
[[1 1]
[1 2]
[1 3]
[2 1]
[2 2]
[2 3]
[3 1]
[3 2]
[3 3]]
看见使用numpy构建两个数组的所有组合的数组关于计算N个数组的笛卡儿乘积的一般解。
您可以在python中进行正常的列表理解。
x = numpy.array([1,2,3])y = numpy.array([4,5])[[x0, y0] for x0 in x for y0 in y]
这应该给你
[[1, 4], [1, 5], [2, 4], [2, 5], [3, 4], [3, 5]]
Numpy:x和y数组点的笛卡儿乘积成二维点的单个数组_慕课猿问 https://www.imooc.com/wenda/detail/564541
https://stackoverflow.com/questions/1208118/using-numpy-to-build-an-array-of-all-combinations-of-two-arrays
d={(i,j):i+j for i in range(1,4) for j in range(1,4)}
print(d)
{(1, 1): 2, (1, 2): 3, (1, 3): 4, (2, 1): 3, (2, 2): 4, (2, 3): 5, (3, 1): 4, (3, 2): 5, (3, 3): 6}