堆叠和添加numpy数组

时间:2014-05-03 10:08:21

标签: python arrays numpy stack

我有一个数组g

g = np.array([])

我有一些循环,我需要在python中使用以下结构构建它:

[
[1 4 
 2 5 
 3 6]
[7 10
 8 11
 9 12]
]
...

即。任意数量的行(假设为10),但每个条目由3x2数组组成。

在顶部初始化g后,我正在这样做:

       curr_g = np.array([])
       for y, w in zip(z.T, weights.T):
            temp_g = sm.WLS(y, X, w).fit()
            # temp_g.params produces a (3L,) array
            # curr_g is where I plan to end up with a 3x2 array
            curr_g = np.hstack((temp_g.params, curr_g))

        g = np.hstack((temp_g.params, g))

我认为当我使用hstack和两个3x1阵列时,我最终会得到一个3x2阵列。但正在发生的事情是,在堆叠后,curr_g只是从(3L,)转到(6L,) ......

另外,一旦我有一个3x2阵列,我如何将3x2阵列叠加在一起?

1 个答案:

答案 0 :(得分:1)

你说得对,“当我使用hstack和两个3x1阵列时,我最终会得到一个3x2阵列”:

params =array([1,2,3]).reshape(3,1)
curr_g =array([4,5,6]).reshape(3,1)
print hstack((params, curr_g)).shape  # == (3,2)

可能,您会得到一个形状为(6,)的数组,因为temp_g.paramsg的形状都为(3,),而不是(3,1)。如果是这种情况,您最好使用column_stack((temp_g.params, curr_g))

最后一点,您首先将大数组g初始化为正确的大小:

g=array((N,3,2))

然后在for循环中填写它:

for j, (y, w) in enumerate(zip(z.T, weights.T)):
    #calculate temp_g and curr_g
    g[j]=column_stack((temp_g.params, curr_g))