J'ai une fonction qui me donne une matrice de 17 * 3 (float (17,3)). J'appelle cette fonction encore et encore dans une boucle, je veux ajouter les matrices pour que les lignes restent 17 mais la colonne continue à s'ajouter pour faire une grande matrice.

1
MUZAFFAR HABIB 14 mars 2019 à 21:57

2 réponses

Meilleure réponse

Sans NUMPY :

Transposez d'abord la matrice car vous ne toucherez pas aux 17 lignes.

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

Ensuite, ajoutez la colonne de 17 lignes comme une ligne de 17 colonnes

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

Une fois que vous avez terminé d'ajouter plusieurs lignes, transposez la matrice comme indiqué ci-dessus. De cette façon, vous ne parcourez pas votre tableau 17 fois à chaque fois que vous ajoutez une colonne à votre matrice.

Avec NUMPY :

Transposer

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

Ajouter une ligne (17 valeurs de colonne que vous vouliez ajouter)

a_transpose.append([1,2,3, .... 17], axis=0)
0
Varun Srinivasan 14 mars 2019 à 19:09

Votre fonction:

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

Construisez de manière itérative une liste de tableaux:

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]])]

Faites un tableau à partir de cette liste:

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]])
0
hpaulj 14 mars 2019 à 19:47