说我有两个向量:
A=linspace(-2,0,6)
B=linspace(0,2,6)
我想创建一个二维矩阵(大小为2乘36),它将A中的所有值与B中的所有值相匹配,因此它类似于:
[[-2 , 0]
[-2 , 0.4]
[-2 , 0.8]
[-2 , 1.2]
[-2 , 1.6]
[-2 , 2.0]
[-1.6 , 0]
[-1.6 , 0.4]
[-1.6 , 0.8]
....
....
[0 , 2.0]]
我猜我需要某种for循环,但我不完全确定如何做到这一点......
答案 0 :(得分:1)
itertools.product
是完成此操作的工具
import itertools
result = array(list(itertools.product(A, B)))
答案 1 :(得分:1)
您可以使用嵌套列表推导来执行此操作。例如:
[[a, b] for a in A for b in B]
答案 2 :(得分:1)
>>> a = np.linspace(-2, 0, 6)
>>> b = np.linspace(0, 2, 6)
>>>
>>> out = np.empty((len(a), len(b), 2))
>>> out[..., 0] = a[:, None]
>>> out[..., 1] = b[None, :]
>>> out = out.reshape(-1, 2)
>>> out
array([[-2. , 0. ],
[-2. , 0.4],
[-2. , 0.8],
[-2. , 1.2],
[-2. , 1.6],
[-2. , 2. ],
[-1.6, 0. ],
[-1.6, 0.4],
[-1.6, 0.8],
[-1.6, 1.2],
[-1.6, 1.6],
[-1.6, 2. ],
[-1.2, 0. ],
[-1.2, 0.4],
[-1.2, 0.8],
[-1.2, 1.2],
[-1.2, 1.6],
[-1.2, 2. ],
[-0.8, 0. ],
[-0.8, 0.4],
[-0.8, 0.8],
[-0.8, 1.2],
[-0.8, 1.6],
[-0.8, 2. ],
[-0.4, 0. ],
[-0.4, 0.4],
[-0.4, 0.8],
[-0.4, 1.2],
[-0.4, 1.6],
[-0.4, 2. ],
[ 0. , 0. ],
[ 0. , 0.4],
[ 0. , 0.8],
[ 0. , 1.2],
[ 0. , 1.6],
[ 0. , 2. ]])
答案 3 :(得分:0)
如果您使用的是pandas.DataFrame
,则可以通过在两个阵列之间执行连接操作来实现,其中每个阵列都有一个对所有条目都是常量的“键”。
你的例子就是这样的:
In [271]: A=linspace(-2,0,6)
In [272]: B=linspace(0,2,6)
In [273]: A
Out[273]: array([-2. , -1.6, -1.2, -0.8, -0.4, 0. ])
In [274]: A = pandas.DataFrame({'A':linspace(-2,0,6)})
In [275]: B = pandas.DataFrame({'B':linspace(0,2,6)})
In [276]: A['key'] = 1
In [277]: B['key'] = 1
In [278]: pandas.merge(A, B, on='key')
Out[278]:
A key B
0 -2.0 1 0.0
1 -2.0 1 0.4
2 -2.0 1 0.8
3 -2.0 1 1.2
4 -2.0 1 1.6
5 -2.0 1 2.0
6 -1.6 1 0.0
7 -1.6 1 0.4
8 -1.6 1 0.8
9 -1.6 1 1.2
10 -1.6 1 1.6
11 -1.6 1 2.0
12 -1.2 1 0.0
13 -1.2 1 0.4
14 -1.2 1 0.8
15 -1.2 1 1.2
16 -1.2 1 1.6
17 -1.2 1 2.0
18 -0.8 1 0.0
19 -0.8 1 0.4
20 -0.8 1 0.8
21 -0.8 1 1.2
22 -0.8 1 1.6
23 -0.8 1 2.0
24 -0.4 1 0.0
25 -0.4 1 0.4
26 -0.4 1 0.8
27 -0.4 1 1.2
28 -0.4 1 1.6
29 -0.4 1 2.0
30 0.0 1 0.0
31 0.0 1 0.4
32 0.0 1 0.8
33 0.0 1 1.2
34 0.0 1 1.6
35 0.0 1 2.0
In [279]: pandas.merge(A, B, on='key')[['A','B']].values
Out[279]:
array([[-2. , 0. ],
[-2. , 0.4],
[-2. , 0.8],
[-2. , 1.2],
[-2. , 1.6],
[-2. , 2. ],
[-1.6, 0. ],
[-1.6, 0.4],
[-1.6, 0.8],
[-1.6, 1.2],
[-1.6, 1.6],
[-1.6, 2. ],
[-1.2, 0. ],
[-1.2, 0.4],
[-1.2, 0.8],
[-1.2, 1.2],
[-1.2, 1.6],
[-1.2, 2. ],
[-0.8, 0. ],
[-0.8, 0.4],
[-0.8, 0.8],
[-0.8, 1.2],
[-0.8, 1.6],
[-0.8, 2. ],
[-0.4, 0. ],
[-0.4, 0.4],
[-0.4, 0.8],
[-0.4, 1.2],
[-0.4, 1.6],
[-0.4, 2. ],
[ 0. , 0. ],
[ 0. , 0.4],
[ 0. , 0.8],
[ 0. , 1.2],
[ 0. , 1.6],
[ 0. , 2. ]])