在循环外添加矩阵

时间:2019-03-14 18:57:58

标签: python numpy

我有一个函数,给我一个17 * 3的矩阵(浮点数(17,3))。我在循环中一次又一次地调用该函数,我想添加矩阵,以使行保持17,而列继续添加,以形成一个大矩阵。

2 个答案:

答案 0 :(得分:0)

没有NUMPY:

首先转置矩阵,因为您不会触摸17行。

# a matrix is 17 * 3
a_transpose = [[a[j][i] for j in range(len(a))] for i in range(len(a[0]))] 

然后,将17行的列添加为17列的一行

a_transpose.append([1,2,3, ... 17])

添加完几行后,如上所述将矩阵转回。这样,每次在矩阵中添加一列时,您就不会重复遍历数组17次。

使用NUMPY:

转置

# a matrix is 17 * 3
a = numpy.array(a)
a_transpose = a.transpose()

添加一行(您要添加的17个列值)

a_transpose.append([1,2,3, .... 17], axis=0)

答案 1 :(得分:0)

您的功能:

In [187]: def foo(i): 
     ...:     return np.arange(i,i+6).reshape(3,2) 
     ...:                                                                       

迭代生成数组列表:

In [188]: alist = []                                                            
In [189]: for i in range(4): 
     ...:     alist.append(foo(i)) 
     ...:                                                                       
In [190]: alist                                                                 
Out[190]: 
[array([[0, 1],
        [2, 3],
        [4, 5]]), array([[1, 2],
        [3, 4],
        [5, 6]]), array([[2, 3],
        [4, 5],
        [6, 7]]), array([[3, 4],
        [5, 6],
        [7, 8]])]

从该列表中创建一个数组:

In [191]: np.concatenate(alist, axis=1)                                         
Out[191]: 
array([[0, 1, 1, 2, 2, 3, 3, 4],
       [2, 3, 3, 4, 4, 5, 5, 6],
       [4, 5, 5, 6, 6, 7, 7, 8]])
相关问题