0
votes

Deux pour les boucles sur une matrice numpie

goodmorning. Supposons que j'ai une matrice bidimensionnelle (appelez-le mat (x, y)) créé avec NUMPY. Sur ce tableau, je dois effectuer des opérations. Comment puis-je réécrire les 2 loops suivants pour les boucles, par exemple en utilisant np.nditer () code> ou quelque chose d'autre qui utilise une méthode numpy? Merci.

    for i in range(x): 
        for j in range(y): 

            if i == 0: MAT[i][j] = j   
            elif j == 0: MAT[i][j] = i


0 commentaires

4 Réponses :


1
votes

Vous pouvez simplement définir la première ligne et la première colonne comme celle-ci xxx

résultat xxx


0 commentaires

0
votes

Puisque vous vous attribuez simplement aux valeurs 0,1, ... à la première rangée et colonne Il n'y a pas besoin d'une double boucle avec si les conditions de l'intérieur.

Il suffit d'attribuer les valeurs à la première ligne: xxx

et à la première colonne: xxx


0 commentaires

0
votes

Vous pouvez fondamentalement attribuer np.arange () code> à une tranchée appropriée de votre entrée.

Vous pouvez le faire soit codant dur la nature 2D de votre entrée ( FOO2 ( ) code>) ou, pour les dimensions arbitraires à l'aide d'une trancheuse définie dynamiquement ( Foon () code>): p> xxx pré>

Notez que double trancher ( par exemple mat [i] [j] [j] code>), tout en travaillant, n'est pas aussi efficace que la coupe à l'aide d'un tuple (par exemple, mat [i, j] p>). P>


Enfin, la nidification des boucles est largement inutilisée dans votre code et vous pourriez la réécrire avec les deux boucles étant séparées (ce qui est beaucoup plus efficace): P>

funcs = foo, foo2, foon, fool, fool_nb


shape = 300, 400
for func in funcs:
    arr = np.zeros(shape)
    print(func.__name__)
    %timeit func(arr)
    print()

# foo
# 100 loops, best of 3: 6.53 ms per loop

# foo2
# 100000 loops, best of 3: 4.28 µs per loop

# foon
# 100000 loops, best of 3: 6.99 µs per loop

# fool
# 10000 loops, best of 3: 89.8 µs per loop

# fool_nb
# 1000000 loops, best of 3: 1.01 µs per loop


0 commentaires

0
votes

Vous n'avez pas besoin d'une boucle, il suffit d'assigner à la tranche xxx


0 commentaires