Python:循环遍历两个向量的值

时间:2014-02-24 19:51:38

标签: python loops numpy vector

说我有两个向量:

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循环,但我不完全确定如何做到这一点......

4 个答案:

答案 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. ]])